SnowConvert: TeradataスクリプトからSnowflake SQL への翻訳リファレンス¶
特定のトピックに関する詳細情報は、以下のページをご覧ください。
BTEQ¶
説明¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
Basic Teradata Query(BTEQ)は、ワークステーションのユーザーが1つまたは複数のTeradataデータベースシステムと通信し、印刷と画面出力の両方でレポートを形式化できるようにする、コマンドベースの汎用プログラムです。
BTEQ に関する詳しい情報は こちら をご覧ください。
サンプルソースパターン¶
1.基本的な BTEQ 例¶
BTEQ コンテンツは、 EXECUTE IMMEDIATE
ブロック内に再配置され、 BTEQ スクリプト関数をSnowflake SQL 実行コードに転送します。
BTEQ スクリプト内の DML および DDL ステートメントはすべて SnowConvert でサポートされ、Snowflake SQL に正常に翻訳されます。まだサポートされていないコマンドや、まったくサポートされていないコマンドには警告メッセージが表示され、コメントアウトされています。
-- Additional Params: -q SnowScript
.LOGON 0/dbc,dbc;
DATABASE tduser;
CREATE TABLE employee_bkup (
EmployeeNo INTEGER,
FirstName CHAR(30),
LastName CHAR(30),
DepartmentNo SMALLINT,
NetPay INTEGER
)
Unique Primary Index(EmployeeNo);
DROP TABLE employee_bkup;
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;
.LOGOFF;
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;
BEGIN
CREATE OR REPLACE TABLE employee_bkup (
EmployeeNo INTEGER,
FirstName CHAR(30),
LastName CHAR(30),
DepartmentNo SMALLINT,
NetPay INTEGER,
UNIQUE (EmployeeNo)
);
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
BEGIN
DROP TABLE employee_bkup;
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 STATUS_OBJECT['SQLCODE'] /*** SSC-FDM-TD0013 - THE SNOWFLAKE ERROR CODE MISMATCH THE ORIGINAL TERADATA ERROR CODE ***/;
END IF;
--.LOGOFF
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'LogOff' NODE ***/!!!
null;
END
$$
2.Bash変数プレースホルダーの例¶
SnowConvert はシェルスクリプトに使用されるBash変数プレースホルダーを持つ BTEQ コードの移行をサポートします。これらのプレースホルダーは SnowSQL の相当するものに移行され、 SSC-FDM-TD0003がコードに追加されます。これらのプレースホルダーを含むコードを移行する場合は、以下を考慮してください。
SnowConvert はシェルスクリプトの移行をサポート していません。 BTEQ コードを移行するには、 BTEQ ファイルに分離し、ツールの入力として提供してください。
移行されたコードを実行するには、変数置換が有効になっている SnowSQL が必要です。 SnowSQL の使用方法の詳細については、 SSC-FDM-TD0003および SnowSQLの公式ドキュメント を確認してください。
-- Additional Params: -q SnowScript
.LOGON dbc, dbc;
DATABASE testing;
SELECT $columnVar FROM $tableVar WHERE col2 = $nameExprVar;
INSERT INTO $tableName values ('$myString', $numValue);
UPDATE $dbName.$tableName SET col1 = $myValue;
DELETE FROM $tableName;
.LOGOFF;
EXECUTE IMMEDIATE
$$
--** SSC-FDM-TD0003 - BASH VARIABLES FOUND, USING SNOWSQL WITH VARIABLE SUBSTITUTION ENABLED IS REQUIRED TO RUN THIS SCRIPT **
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
-- Additional Params: -q SnowScript
--.LOGON dbc, dbc
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BTLogOn' NODE ***/!!!
null;
BEGIN
USE DATABASE testing;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
BEGIN
SELECT
&columnVar
FROM
&tableVar
WHERE
col2 = &nameExprVar;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
BEGIN
INSERT INTO &tableName
VALUES ('&myString', &numValue);
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
BEGIN
UPDATE &dbName.&tableName
SET
col1 = &myValue
;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
BEGIN
DELETE FROM
&tableName;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
--.LOGOFF
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'LogOff' NODE ***/!!!
null;
END
$$
既知の問題¶
Snowflake SQL に相当するコマンドがない BTEQ コマンドがある可能性があります
BTEQ はコマンドベースのプログラムであるため、入力コードには、Snowflake SQL で100%機能的に等価でないコマンドが存在する可能性があります。これらの特定のケースは識別され、出力コードに警告がマークされ、以降のページに文書化されます。
MLOAD¶
インポート¶
説明¶
IMPORT コマンドはデータ入力のソースを指定します。
MLoad のインポートに関する詳しい情報は こちら をご覧ください
サンプルソースパターン¶
BTEQ のコンテンツとして、 MLoad も EXECUTE IMMEDIATE
ブロックに再配置されます。各レイアウトフィールドをselectに追加するインポート変換。dmlラベルへの挿入は COPY INTO に変換され、upsert(更新と挿入)は MERGE INTO に変換されます。
1.挿入を含む DML ラベル¶
-- Additional Params: -q SnowScript
.LOGTABLE my_table_log;
.LOGON my_teradata_system/username,password;
BEGIN IMPORT MLOAD TABLES my_table
WORKTABLES my_table_work
ERRORTABLES my_table_err;
.LAYOUT my_layout;
.FIELD col1 * VARCHAR(2);
.FIELD col2 * VARCHAR(5);
.dml label insert_into_my_table
IGNORE DUPLICATE INSERT ROWS ;
INSERT INTO my_table(col1, col2) VALUES (:col1, :col2);
.IMPORT INFILE C:\USER\user\my_tr_file_1.tr
FORMAT UNFORMAT
LAYOUT my_layout APPLY insert_into_my_table;
.END MLOAD;
.LOGOFF;
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
-- Additional Params: -q SnowScript
/*.LOGTABLE my_table_log;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*.LOGON my_teradata_system/username,password;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*BEGIN IMPORT MLOAD TABLES my_table
WORKTABLES my_table_work*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '7' COLUMN '1' OF THE SOURCE CODE STARTING AT 'ERRORTABLES'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'my_table_err' ON LINE '7' COLUMN '13'. CODE '81'. ***/
/*--ERRORTABLES my_table_err*/
/*.LAYOUT my_layout;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. INFORMATION MAY BE USED IN A TRANSFORMED IMPORT CLAUSE **
/*.dml label insert_into_my_table
IGNORE DUPLICATE INSERT ROWS ;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. INFORMATION MAY BE USED IN A TRANSFORMED IMPORT CLAUSE **
BEGIN
CREATE OR REPLACE STAGE &{stagename};
PUT file://C:\USER\user\my_tr_file_1.tr &{stagename};
COPY INTO my_table (
col1,
col2
)
FROM
(
SELECT DISTINCT
SUBSTRING($1, 1, 2) col1,
SUBSTRING($1, 3, 5) col2
FROM
@&{stagename}/my_tr_file_1.tr
);
END;
/*.END MLOAD;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*.LOGOFF;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
END
$$
2.upsertを含む DML ラベル¶
-- Additional Params: -q SnowScript
.LOGTABLE my_table_log;
.LOGON my_teradata_system/username,password;
BEGIN IMPORT MLOAD TABLES my_table
WORKTABLES my_table_work
ERRORTABLES my_table_err;
.LAYOUT my_layout;
.FIELD col1 * VARCHAR(2);
.FIELD col2 * VARCHAR(5);
.dml label upsert_into_my_table;
UPDATE my_table
SET
col1 = :col1,
col2 = :col2
WHERE col2 = :col2
INSERT INTO my_table (
col1, col2)
VALUES (:col1, :col2);
.IMPORT INFILE C:\USER\user\my_tr_file_1.tr
FORMAT UNFORMAT
LAYOUT my_layout APPLY upsert_into_my_table;
.END MLOAD;
.LOGOFF;
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
-- Additional Params: -q SnowScript
/*.LOGTABLE my_table_log;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*.LOGON my_teradata_system/username,password;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*BEGIN IMPORT MLOAD TABLES my_table
WORKTABLES my_table_work*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '7' COLUMN '1' OF THE SOURCE CODE STARTING AT 'ERRORTABLES'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'my_table_err' ON LINE '7' COLUMN '13'. CODE '81'. ***/
/*--ERRORTABLES my_table_err*/
/*.LAYOUT my_layout;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. INFORMATION MAY BE USED IN A TRANSFORMED IMPORT CLAUSE **
/*.dml label upsert_into_my_table;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. INFORMATION MAY BE USED IN A TRANSFORMED IMPORT CLAUSE **
BEGIN
CREATE OR REPLACE STAGE &{stagename};
PUT file://C:\USER\user\my_tr_file_1.tr &{stagename};
MERGE INTO my_table merge_table
USING (
SELECT
SUBSTRING($1, 1, 2) col1,
SUBSTRING($1, 3, 5) col2
FROM
@&{stagename}/my_tr_file_1.tr
) load_temp ON merge_table.col2 = load_temp.col2
WHEN MATCHED THEN
UPDATE SET
merge_table.col1 = load_temp.col1,
merge_table.col2 = load_temp.col2
WHEN NOT MATCHED THEN
INSERT (col1, col2)
VALUES (load_temp.col1, load_temp.col2);
END;
/*.END MLOAD;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*.LOGOFF;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
END
$$
3.レイアウトまたは DML ラベルが見つかりません¶
-- Additional Params: -q SnowScript
.LOGTABLE my_table_log;
.LOGON my_teradata_system/username,password;
BEGIN IMPORT MLOAD TABLES my_table
WORKTABLES my_table_work
ERRORTABLES my_table_err;
.LAYOUT my_layout;
.FIELD col1 * VARCHAR(2);
.FIELD col2 * VARCHAR(5);
.dml label insert_into_my_table
IGNORE DUPLICATE INSERT ROWS ;
INSERT INTO my_table(col1, col2)VALUES (:col1, :col2);
.IMPORT INFILE C:\USER\user\my_tr_file_1.tr
FORMAT UNFORMAT
LAYOUT not_layout APPLY insert_into_my_table;
.IMPORT INFILE C:\USER\user\my_tr_file_1.tr
FORMAT UNFORMAT
LAYOUT my_layout APPLY insert_not_my_table;
.END MLOAD;
.LOGOFF;pl
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
-- Additional Params: -q SnowScript
/*.LOGTABLE my_table_log;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*.LOGON my_teradata_system/username,password;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*BEGIN IMPORT MLOAD TABLES my_table
WORKTABLES my_table_work*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '7' COLUMN '1' OF THE SOURCE CODE STARTING AT 'ERRORTABLES'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'my_table_err' ON LINE '7' COLUMN '13'. CODE '81'. ***/
/*--ERRORTABLES my_table_err*/
/*.LAYOUT my_layout;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. INFORMATION MAY BE USED IN A TRANSFORMED IMPORT CLAUSE **
/*.dml label insert_into_my_table
IGNORE DUPLICATE INSERT ROWS ;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. INFORMATION MAY BE USED IN A TRANSFORMED IMPORT CLAUSE **
-- .IMPORT INFILE C:\USER\user\my_tr_file_1.tr FORMAT UNFORMAT LAYOUT not_layout APPLY insert_into_my_table
;
BEGIN
CREATE OR REPLACE STAGE &{stagename};
PUT file://C:\USER\user\my_tr_file_1.tr &{stagename};
END;
/*.END MLOAD;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*.LOGOFF;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '26' COLUMN '9' OF THE SOURCE CODE STARTING AT 'pl'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'pl' ON LINE '26' COLUMN '9'. CODE '81'. ***/
/*--pl*/
END
$$
4.更新ステートメントにない条件¶
-- Additional Params: -q SnowScript
.LOGTABLE my_table_log;
.LOGON my_teradata_system/username,password;
BEGIN IMPORT MLOAD TABLES my_table
WORKTABLES my_table_work
ERRORTABLES my_table_err;
.LAYOUT my_layout;
.FIELD col1 * VARCHAR(2);
.FIELD col2 * VARCHAR(5);
.dml label upsert_into_my_table;
UPDATE my_table
SET
col1 = :col1,
col2 = :col2
INSERT INTO my_table (
col1, col2)
VALUES (:col1, :col2);
.IMPORT INFILE C:\USER\user\my_tr_file_1.tr
FORMAT UNFORMAT
LAYOUT my_layout APPLY upsert_into_my_table;
.END MLOAD;
.LOGOFF;
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
-- Additional Params: -q SnowScript
/*.LOGTABLE my_table_log;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*.LOGON my_teradata_system/username,password;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*BEGIN IMPORT MLOAD TABLES my_table
WORKTABLES my_table_work*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '7' COLUMN '1' OF THE SOURCE CODE STARTING AT 'ERRORTABLES'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'my_table_err' ON LINE '7' COLUMN '13'. CODE '81'. ***/
/*--ERRORTABLES my_table_err*/
/*.LAYOUT my_layout;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. INFORMATION MAY BE USED IN A TRANSFORMED IMPORT CLAUSE **
/*.dml label upsert_into_my_table;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. INFORMATION MAY BE USED IN A TRANSFORMED IMPORT CLAUSE **
-- .IMPORT INFILE C:\USER\user\my_tr_file_1.tr FORMAT UNFORMAT LAYOUT my_layout APPLY upsert_into_my_table
;
/*.END MLOAD;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
/*.LOGOFF;*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
END
$$
既知の問題¶
import句のいくつかのステートメントはまだサポートされていません。
AXSMOD ステートメント
INMODE ステートメント
FORMAT (FORMAT UNFORMAT のみがサポートされています)
APPLY ラベルの WHERE 条件
関連 EWIS¶
SSC-EWI-0001: ソースコードの行に認識できないトークンがあります。
SSC-FDM-0027: 次のステートメントを削除しました。 SnowFlake には適用されません。
COMMON STATEMENTS¶
ERROR HANDLING¶
BTEQ のエラー処理機能は、Teradataデータベースのエラーコードに基づいています。これらは、ユーザー指定のTeradata SQL ステートメントに応答して生成される標準エラーコードとメッセージです。BTEQ ユーザーは、これらのメッセージを変更、修正、削除することはできません。
BTEQ エラー処理に関する詳しい情報は、 こちら をご覧ください。
サンプルソースパターン¶
BTEQ エラー処理の基本例¶
エラー条件の内容は、 ERRORCODE がゼロと異なる場合に別のステートメントに再配置されます。それ以外の場合は、元のコードとして配置することができます。まず、ifステートメントの上のクエリは BEGIN - END ブロック内に再配置され、例外が発生した場合は EXCEPTION ブロックでキャッチされます。次に、 ERRORCODE 変数は、 SQLCODE の正確な番号が BTEQ の ERRORCODE と同じでないことを示す EWI を伴って、それらの SQLCODE を示す宣言された変数に変更されます。
-- Additional Params: -q SnowScript
SELECT * FROM table1;
.IF ERRORCODE<>0 THEN .EXIT 1
.QUIT 0
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
$$
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-FDM-TD0013: Snowflakeエラーコードが元のTeradataエラーコードと不一致です。
EXIT または QUIT¶
すべてのデータベースセッションをログオフし、 BTEQ を終了します。
引数が明示的に与えられない限り、 BTEQ の実行中に発生した最も高い重大度値がデフォルトで BTEQ の戻りコード値として使用されます。(Teradata基本クエリリファレンス EXIT または QUIT コマンド)
.<ExitCommand> [<Result>];
<ExitCommand> := EXIT | QUIT
<Result> := <Status_variable> | Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
サンプルソースパターン¶
基本的な IF 例¶
-- Additional Params: -q SnowScript
.QUIT ERRORCODE;
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 は0を返すように変換します。
関連 EWIS¶
SSC-FDM-TD0013: Snowflakeエラーコードが元のTeradataエラーコードと不一致です。
GOTO¶
説明¶
BTEQ Gotoコマンドは、指定されたラベルが表示されるまで、すべての介在する BTEQ コマンドや SQL ステートメントをすべてスキップし、通常どおり処理を再開します。(Teradata基本クエリリファレンスGotoコマンド)
.GOTO LabelName;
サンプルソースパターン¶
基本的な GOTO 例¶
Snowflake Scriptingには、Teradata BTEQ Gotoコマンドと同等のステートメントはありませんが、幸いなことに、GotoコマンドとLabelsコマンドのシーケンスが常にトポロジー的に逆順であるため、入力コードから削除して同等のコードを得ることができます。言い換えれば、定義は用途の後にあるということです。したがって、SnowconvertはLabelセクションのコードを対応するGotoステートメントにボトムアップでコピーするだけです。
-- 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
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: 次のステートメントを削除しました。 SnowFlake には適用されません。
SSC-EWI-0073: 機能同等性レビュー保留中
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 例¶
-- Additional Params: -q SnowScript
.IF ACTIVITYCOUNT <> 0 THEN .GOTO InsertEmployee;
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
IF (STATUS_OBJECT['SQLROWCOUNT'] != 0) THEN
RETURN 1;
END IF;
END
$$
関連 EWIS¶
関連 EWIs はありません。