SnowConvert AI – Teradata – COMMON STATEMENTS¶
Übersetzungsreferenzen zur Konvertierung von Teradata-Skriptanweisungen, die allen Skriptsyntaxen gemeinsam sind, in Snowflake SQL
ERROR HANDLING¶
Die Funktionen von BTEQ zur Fehlerbehandlung basieren auf den Fehlercodes der Teradata-Datenbank. Dies sind die Standardfehlercodes und -meldungen, die als Antwort auf vom Benutzer angegebene Teradata SQL-Anweisungen ausgegeben werden. Ein Benutzer von BTEQ kann diese Nachrichten nicht ändern, modifizieren oder löschen.
Weitere Informationen zu BTEQ-Fehlerbehandlung finden Sie hier.
Beispielhafte Quellcode-Muster¶
Grundlegendes BTEQ-Beispiel für Fehlerbehandlung¶
Der Inhalt der Fehlerbedingungen wird in andere Anweisungen verschoben, wenn ERRORCODE ungleich Null ist, andernfalls kann er wie der ursprüngliche Code gefunden werden. Zunächst wird die Abfrage oberhalb der IF-Anweisung in einen BEGIN - END-Block verlagert, wo sie im Falle einer Ausnahme im EXCEPTION-Block abgefangen wird. Zweitens wird die Variable ERRORCODE in die deklarierte Variable geändert, die ihren SQLCODE angibt, wobei ein EWI darauf hinweist, dass die genaue Nummer des SQLCODE nicht mit dem ERRORCODE in BTEQ übereinstimmt.
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
$$
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
EXIT oder QUIT¶
Meldet alle Datenbanksitzungen ab und beendet sich anschließend BTEQ.
Der höchste während der Ausführung von BTEQ festgestellte Schweregradwert wird standardmäßig als Rückgabewert von BTEQverwendet, es sei denn, es wird ausdrücklich ein Argument angegeben. (Teradata Basic Query Reference EXIT- oder QUIT- Befehl)
.<ExitCommand> [<Result>];
<ExitCommand> := EXIT | QUIT
<Result> := <Status_variable> | Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
Beispielhafte Quellcode-Muster¶
Grundlegendes IF-Beispiel¶
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
$$
Bekannte Probleme¶
Wenn der EXIT- oder QUIT-Befehl keine Eingabe hat, gibt er den ERRORLEVEL-Wert als Standardwert zurück. Allerdings transformiert SnowConvert AI den Wert, um 0 zurückzugeben.
Zugehörige EWIS¶
SSC-FDM-TD0013: Der Snowflake-Fehlercode stimmt nicht mit dem ursprünglichen Teradata-Fehlercode überein.
GOTO¶
Beschreibung¶
Der BTEQ GOTO-Befehl überspringt alle dazwischen liegenden BTEQ-Befehle und SQL-Anweisungen, bis ein bestimmtes Label gefunden wird, und setzt dann die Verarbeitung wie gewohnt fort. (Teradata Basic Query Reference Goto-Befehl)
.GOTO LabelName;
Beispielhafte Quellcode-Muster¶
Grundlegendes GOTO-Beispiel¶
Snowflake Scripting hat keine entsprechende Anweisung für den BTEQ Goto-Befehl von Teradata. Glücklicherweise kann es aber aus dem Eingabecode entfernt werden, wodurch ein äquivalenter Code entsteht, da die Goto- und Labels-Befehle immer in umgekehrter topologischer Reihenfolge ausgeführt werden. Mit anderen Worten, die Definitionen stehen nach ihren Verwendungen. Somit muss SnowConvert AI nur den gesamten Label-Abschnittscode in die entsprechenden Goto-Anweisungen kopieren.
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
$$
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
Zugehörige EWIS¶
[SSC-EWI-0001](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0001): Unerkanntes Token in der Zeile des Quellcodes.
SSC-FDM-0027: Nächste Anweisung entfernt, da sie in SnowFlake nicht anwendbar ist.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend
SSC-FDM-TD0026: GOTO-Anweisung wurde aufgrund von Anweisungsinversion entfernt.
IF… THEN…¶
Beschreibung¶
Die IF-Anweisung prüft eine Bedingung und führt eine Aktion aus, wenn die Aktion „true“ ist. (Teradata SQL-Referenz IF…THEN…)
.IF <Condition> THEN <Action>;
<Condition> := <Status_variable> <Operator> Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
<Operator> := ^= | != | ~= | <> | = | < | > | <= | >=
<Action> := BTEQ_command | SQL_request
Beispielhafte Quellcode-Muster¶
Grundlegendes IF-Beispiel¶
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
$$
Zugehörige EWIS¶
Keine zugehörigen EWIs.