SnowConvert AI - Teradata - COMMON STATEMENTS¶
すべてのスクリプト構文に共通するTeradataスクリプト文をSnowflake SQL に変換するための変換リファレンス
ERROR HANDLING¶
BTEQ のエラー処理機能は、Teradataデータベースのエラーコードに基づいています。これらは、ユーザー指定のTeradata SQL ステートメントに応答して生成される標準エラーコードとメッセージです。BTEQ ユーザーは、これらのメッセージを変更、修正、削除することはできません。
BTEQ エラー処理に関する詳しい情報は、 こちら をご覧ください。
サンプルソースパターン¶
BTEQ エラー処理の基本例¶
エラー条件の内容は、 ERRORCODE がゼロと異なる場合に別のステートメントに再配置されます。それ以外の場合は、元のコードとして配置することができます。まず、ifステートメントの上のクエリは BEGIN - END ブロック内に再配置され、例外が発生した場合は EXCEPTION ブロックでキャッチされます。次に、 ERRORCODE 変数は、 SQLCODE の正確な番号が BTEQ の ERRORCODE と同じでないことを示す EWI を伴って、それらの SQLCODE を示す宣言された変数に変更されます。
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
$$
既知の問題¶
問題は見つかりませんでした。
EXIT または QUIT¶
すべてのデータベースセッションをログオフし、 BTEQ を終了します。
引数が明示的に与えられない限り、 BTEQ の実行中に発生した最も高い重大度値がデフォルトで BTEQ の戻りコード値として使用されます。(Teradata基本クエリリファレンス EXIT または QUIT コマンド)
.<ExitCommand> [<Result>];
<ExitCommand> := EXIT | QUIT
<Result> := <Status_variable> | Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
サンプルソースパターン¶
基本的な 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
$$
既知の問題¶
EXIT またはQUIT コマンドに入力がない場合、デフォルトとして ERRORLEVEL を返す。しかし、SnowConvert AI はこれを0を返すように変換します。
関連 EWIS¶
SSC-FDM-TD0013:Snowflakeエラーコードが元のTeradataのエラーコードと一致しません。
GOTO¶
説明¶
BTEQ Gotoコマンドは、指定されたラベルが表示されるまで、すべての介在する BTEQ コマンドや SQL ステートメントをすべてスキップし、通常どおり処理を再開します。(Teradata基本クエリリファレンスGotoコマンド)
.GOTO LabelName;
サンプルソースパターン¶
基本的な GOTO 例¶
Snowflakeスクリプトには、Teradataの BTEQ Gotoコマンドに相当するステートメントがありませんが、GotoコマンドとLabelsコマンドが常に逆位相順で並んでいるため、入力コードからこのコマンドを削除しても、同等のコードを生成することができます。言い換えると、定義はそれらの使用箇所の後に現れます。したがって、 SnowConvert AI は、すべてのLabelセクションのコードを対応するGotoステートメントに下から上へコピーするだけです。
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
$$
既知の問題¶
問題は見つかりませんでした。
関連 EWIS¶
SSC-EWI-0001: ソースコードの行に認識できないトークンがあります。
[SSC-FDM-0027](../../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM.md#ssc-fdm-0027):次のステートメントは SnowFlake では適用されないため、削除しました。
SSC-EWI-0073: 機能等価性レビュー保留中
[SSC-FDM-TD0026](../../../general/technical-documentation/issues-and-troubleshooting/functional-difference/teradataFDM.md#ssc-fdm-td0026):if文の反転により GOTO 文が削除されました。
IF... THEN...¶
説明¶
IF ステートメントは、条件を検証し、アクションが真の場合にアクションを実行します。(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
サンプルソースパターン¶
基本的な 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
$$
関連 EWIS¶
関連 EWIs はありません。