SnowConvert AI - Teradata - COMMON STATEMENTS¶
Références de traduction pour convertir les instructions de script Teradata qui sont communes à toutes les syntaxes de scripts en Snowflake SQL
ERROR HANDLING¶
Les capacités de traitement des erreurs BTEQ sont basées sur les codes d’erreur de la base de données Teradata. Il s’agit des codes d’erreur et des messages standard produits en réponse aux instructions Teradata SQL spécifiées par l’utilisateur. Un utilisateur BTEQ ne peut pas changer, modifier ou supprimer ces messages.
Pour plus d’informations sur le traitement des erreurs par BTEQ, cliquez ici.
Modèles d’échantillons de sources¶
Exemple de traitement des erreurs de base de BTEQ¶
Le contenu des conditions d’erreur est relocalisé dans différentes instructions dans le cas où ERRORCODE est différent de zéro, sinon il peut être localisé comme le code d’origine. Tout d’abord, la requête située au-dessus de l’instruction if est relocalisée dans un bloc BEGIN - END, où, en cas d’exception, elle sera rattrapée dans le bloc EXCEPTION. Ensuite, la variable ERRORCODE sera remplacée par la variable déclarée indiquant le SQLCODE avec un EWI indiquant que le numéro exact du SQLCODE n’est pas le même que le ERRORCODE dans BTEQ.
Teradata BTEQ¶
-- Additional Params: -q SnowScript
SELECT * FROM table1;
.IF ERRORCODE<>0 THEN .EXIT 1
.QUIT 0
Snowflake SQL¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
BEGIN
-- Additional Params: -q SnowScript
SELECT
*
FROM
table1;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
IF (STATUS_OBJECT['SQLCODE'] /*** SSC-FDM-TD0013 - THE SNOWFLAKE ERROR CODE MISMATCH THE ORIGINAL TERADATA ERROR CODE ***/ != 0) THEN
RETURN 1;
END IF;
RETURN 0;
END
$$
Problèmes connus¶
Aucun problème n’a été constaté.
EXIT ou QUIT¶
Déconnecte toutes les sessions de la base de données et quitte BTEQ.
La valeur de gravité la plus élevée rencontrée au cours de l’exécution de BTEQ sera utilisée par défaut comme valeur du code de retour de BTEQ, à moins qu’un argument ne soit explicitement fourni.(Référence Teradata Basic Query Commande EXIT ou QUIT)
.<ExitCommand> [<Result>];
<ExitCommand> := EXIT | QUIT
<Result> := <Status_variable> | Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
Modèles d’échantillons de sources¶
Exemple de base IF¶
Teradata BTEQ¶
-- Additional Params: -q SnowScript
.QUIT ERRORCODE;
Snowflake SQL¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
RETURN STATUS_OBJECT['SQLCODE'] /*** SSC-FDM-TD0013 - THE SNOWFLAKE ERROR CODE MISMATCH THE ORIGINAL TERADATA ERROR CODE ***/;
END
$$
Problèmes connus¶
Lorsque la commande EXIT ou QUIT n’a pas d’entrée, elle renvoie le résultat ERRORLEVEL par défaut. Cependant, SnowConvert AI la transforme pour retourner 0.
connexesEWIS¶
SSC-FDM-TD0013: Le code d’erreur Snowflake ne correspond pas au code d’erreur Teradata d’origine.
GOTO¶
Description¶
La commande BTEQ Goto ignore toutes les commandes BTEQ et les instructions SQL jusqu’à ce qu’une étiquette spécifiée soit rencontrée, puis reprend le traitement comme d’habitude. (Référence Teradata Basic Query Commande Goto)
.GOTO LabelName;
Modèles d’échantillons de sources¶
Exemple de base GOTO¶
L’exécution de scripts Snowflake n’a pas d’instruction équivalente pour la commande Teradata BTEQ Goto, mais heureusement elle puisse être retirée du code d’entrée et obtenir un code équivalent, en raison de la séquence des commandes Goto et Labels toujours dans l’ordre topologique inverse. En d’autres termes, les définitions suivent leur utilisation. Ainsi, SnowConvert AI doit simplement copier de bas en haut tout le code de la section Label dans les instructions Goto correspondantes.
Teradata BTEQ¶
-- Additional Params: -q SnowScript
.LOGON 0/dbc,dbc;
DATABASE tduser;
.LOGON 127.0.0.1/dbc,dbc;
INSERT INTO TABLEB VALUES (1);
.IF activitycount = 0 then .GOTO SECTIONA
.IF activitycount >= 1 then .GOTO SECTIONB
.label SECTIONA
.REMARK 'Zero Hours on Account'
.GOTO SECTIONC
.label SECTIONB
.REMARK 'Total Hours on Account'
.label SECTIONC
.logoff
.exit
Snowflake¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
-- Additional Params: -q SnowScript
--.LOGON 0/dbc,dbc
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BTLogOn' NODE ***/!!!
null;
BEGIN
USE DATABASE tduser;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
--.LOGON
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BTLogOn' NODE ***/!!!
null;
/*** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '4' COLUMN '8' OF THE SOURCE CODE STARTING AT '127.0'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'LOGON' ON LINE '4' COLUMN '2'. FAILED TOKEN WAS '127.0' ON LINE '4' COLUMN '8'. CODE '81'. ***/
/*--127.0.0.1/dbc,dbc*/
BEGIN
INSERT INTO TABLEB
VALUES (1);
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
IF (NOT (STATUS_OBJECT['SQLROWCOUNT'] = 0)) THEN
--** SSC-FDM-TD0026 - GOTO SECTIONA WAS REMOVED DUE TO IF STATEMENT INVERSION **
IF (STATUS_OBJECT['SQLROWCOUNT'] >= 1) THEN
/*.label SECTIONB*/
--.REMARK 'Total Hours on Account'
null;
/*.label SECTIONC*/
--.logoff
null;
RETURN 0;
END IF;
END IF;
/*.label SECTIONA*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
--.REMARK 'Zero Hours on Account'
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'Remark' NODE ***/!!!
null;
/*.label SECTIONC*/
--.logoff
null;
RETURN 0;
/*.label SECTIONB*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
--.REMARK 'Total Hours on Account'
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'Remark' NODE ***/!!!
null;
/*.label SECTIONC*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
--.logoff
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'LogOff' NODE ***/!!!
null;
RETURN 0;
END
$$
Problèmes connus ¶
Aucun problème n’a été constaté.
connexesEWIS¶
SSC-EWI-0001 : Jeton non reconnu sur la ligne du code source.
SSC-FDM-0027 : Suppression de l’instruction suivante, non applicable dans SnowFlake.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle
SSC-FDM-TD0026 : l’instruction GOTO a été supprimée en raison de l’inversion de l’instruction If.
IF … THEN…¶
Description¶
L’instruction IF valide une condition et exécute une action lorsque l’action est vraie. (Référence de langue Teradata SQL IF…THEN…)
.IF <Condition> THEN <Action>;
<Condition> := <Status_variable> <Operator> Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
<Operator> := ^= | != | ~= | <> | = | < | > | <= | >=
<Action> := BTEQ_command | SQL_request
Modèles d’échantillons de sources¶
Exemple de base IF¶
Teradata BTEQ¶
-- Additional Params: -q SnowScript
.IF ACTIVITYCOUNT <> 0 THEN .GOTO InsertEmployee;
Snowflake SQL¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
IF (STATUS_OBJECT['SQLROWCOUNT'] != 0) THEN
RETURN 1;
END IF;
END
$$
connexesEWIS¶
Pas d’EWIs connexes.