SnowConvert AI - Teradata - DDL

このセクションでは、データ定義言語要素の変換リファレンスのドキュメントをご覧いただけます。

インデックス

INDEX ステートメントをSnowflakeに変換するための翻訳リファレンス

警告

現在、_ Create Index _ ステートメントは変換されていませんが、解析されています。また、ソースコードにCreate index ステートメントがある場合、_ Assessment Report _ ではこれらも考慮されます。

Create Indexの例

Teradataの入力

 CREATE INDEX (col1, col2, col3) ORDER BY VALUES (col2) ON table1;

CREATE INDEX my_index_name ON my_table (column1, column2);
Copy

注釈

アーキテクチャ上の理由により、Snowflakeはインデックスをサポートしていないため、 SnowConvert AI はインデックスの作成に関連するすべてのコードを削除します。Snowflakeは、各テーブルに、 DML 操作のパフォーマンスを高速化するマイクロパーティションを自動的に作成します。ユーザーはこれらのマイクロパーティションの作成や管理を心配する必要はありません。

通常、これだけで非常に優れたクエリパフォーマンスが得られますが、データクラスタリングキーを作成することで改善する方法もあります。Snowflakeの公式ページ には、マイクロパーティションとデータクラスタリングに関する詳細情報が掲載されています。

結合インデックス

説明

SnowConvert AI では、Teradataの結合インデックスはSnowflakeの動的テーブルに変換されます。動的テーブルを適切に設定するには、2つの重要なパラメーターを定義する必要があります。 TARGET_LAG と WAREHOUSE です。これらのパラメーターが構成オプションで指定されないままになっている場合、 SnowConvert AI では、以下の例で示されるように、変換中にあらかじめ割り当てられたデフォルト値になります。

結合インデックスの詳細情報は こちら をご覧ください。

動的テーブルに必要なパラメーターについては、 こちら をご覧ください。

サンプルソースパターン

Teradata

結合インデックス

CREATE JOIN INDEX Employee
AS   
SELECT 
  Employee_Id,
  First_Name,
  Last_Name,
  BirthDate,
  DepartmentNo   
FROM Employee   
PRIMARY INDEX (First_Name); 
Copy

Snowflake

動的テーブル

CREATE OR REPLACE DYNAMIC TABLE Employee
--** SSC-FDM-0031 - DYNAMIC TABLE REQUIRED PARAMETERS SET BY DEFAULT **
TARGET_LAG='1 day'
WAREHOUSE=UPDATE_DUMMY_WAREHOUSE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
AS
SELECT
  Employee_Id,
  First_Name,
  Last_Name,
  BirthDate,
  DepartmentNo
FROM 
  Employee;
Copy

既知の問題

現在、既知のエラーは検出されていません。

スキーマ

説明

TeradataからSnowflakeへの CREATE SCHEMA ステートメントの変換は、基本構文が変わらないので簡単です。

サンプルソースパターン

Teradata

結合インデックス

CREATE SCHEMA IF EXISTS schema_name;
Copy

Snowflake

動的テーブル

CREATE SCHEMA IF EXISTS schema_name
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/23/2024" }}'
;
Copy

既知の問題

CREATE SCHEMA の WITH プロパティ

Teradataの CREATE SCHEMA ステートメントに関連する WITH プロパティは、同等の機能がないためSnowflakeではサポートされていません。

Teradata

結合インデックス

CREATE SCHEMA IF EXISTS schema_name
WITH ( PROPERTY1 = PROPERTYNAME, PROPERTY2 = PROPERTTYNAME, PROPERTY3 = PROPERTTYNAME);
Copy

Snowflake

動的テーブル

CREATE SCHEMA IF EXISTS schema_name
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/23/2024" }}'
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'SCHEMA WITH' NODE ***/!!!
WITH ( PROPERTY1 = PROPERTYNAME, PROPERTY2 = PROPERTTYNAME, PROPERTY3 = PROPERTTYNAME);
Copy

関連 EWIs

  1. SSC-EWI-0073: 機能等価性レビュー保留中。

ビュー

Teradata VIEW ステートメントをSnowflakeに変換するための翻訳リファレンス

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

Teradataの VIEW ステートメントはSnowflake VIEW 構文に翻訳されます。

Teradata VIEW に関する詳細情報については、 こちら をご覧ください。

サンプルソースパターン

ビュー変換の作成

Teradata

ビュー
 CREATE VIEW view1 (someTable.col1, someTable.col2) AS locking row for access
    SELECT
    my_table.col1, my_table.col2
    FROM table1 AS my_table
    WHERE my_table.col1 = 'SpecificValue'
    UNION ALL
    SELECT other_table.col2
    FROM table2 AS other_table
    WHERE my_table.col2 = other_table.col2
Copy

Snowflake

ビュー
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "table1", "table2" **
CREATE OR REPLACE VIEW view1
(
    col1,
    col2)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/02/2025",  "domain": "no-domain-provided" }}'
AS
SELECT
    my_table.col1,
    my_table.col2
    FROM
    table1 AS my_table
    WHERE
    UPPER(RTRIM( my_table.col1)) = UPPER(RTRIM('SpecificValue'))
    UNION ALL
    SELECT
    other_table.col2
       FROM
    table2 AS other_table
       WHERE my_table.col2 = other_table.col2;
Copy

カスタムスキーマタグ

カスタムスキーマは、ビューの指定の前に、「sc-view」という名前の XML タグで指定します。このタグには、以下のようにスキーマの値とビュー名をピリオド「.」で区切ったもののみを記述します: <sc-view>SCHEMANAME.VIEWNAME</sc-view>

カスタムスキーマはビュー修飾子として使用され、ビューの名前と、 FROM クエリおよび内部クエリで参照されるすべてのオブジェクトは、そのカスタムスキーマを使用することになります。そのため、同じ名前で異なるカスタムタグを持つ複数のビューが存在する可能性があります。: 同じ名前の2つのビューは、カスタムスキーマタグの情報を使って翻訳を行います。

Teradata
ビュー
 /*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
REPLACE VIEW EMPLOYEEB AS
SELECT * FROM EMPLOYEE
WHERE AREA = "AREAB";

/*<sc-view>Views.EMPLOYEEB</sc-view>*/
REPLACE VIEW EMPLOYEEB AS
SELECT * FROM EMPLOYEE
WHERE AREA = "AREAB";
Copy
Snowflake

Snowflakeの変換は、カスタマイズされたスキーマ名 MySchema、カスタマイズされたデータベース名 MyDatabase、または変換設定でカスタマイズされたデータベースまたはスキーマを選択しないかによって異なります。

カスタムスキーマ
 /*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "EMPLOYEE" **
CREATE OR REPLACE VIEW RMSviews.EMPLOYEEB
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
* FROM
RMSviews.EMPLOYEE
WHERE AREA = "AREAB";

/*<sc-view>Views.EMPLOYEEB</sc-view>*/
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "EMPLOYEE" **
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR Views.EMPLOYEEB. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE OR REPLACE VIEW Views.EMPLOYEEB
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
* FROM
Views.EMPLOYEE
 WHERE AREA = "AREAB";
Copy
カスタムデータベース
 /*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW MyDatabase.RMSviews.EMPLOYEEB
AS
   SELECT * FROM MyDatabase.RMSviews.EMPLOYEE
   WHERE AREA = "AREAB";

/*<sc-view>Views.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW MyDatabase.Views.EMPLOYEEB
AS
   SELECT * FROM MyDatabase.Views.EMPLOYEE
   WHERE AREA = "AREAB";
Copy
選択されていません
 /*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW RMSviews.PUBLIC.EMPLOYEEB
AS
   SELECT * FROM RMSviews.PUBLIC.EMPLOYEE
   WHERE AREA = "AREAB";

/*<sc-view>Views.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW Views.PUBLIC.EMPLOYEEB
AS
   SELECT * FROM Views.PUBLIC.EMPLOYEE
   WHERE AREA = "AREAB";
Copy

既知の問題

1.アクセスロジックの違いで行をロック

Snowflakeでは、オブジェクトや要素へのアクセスはユーザーと権限に基づいて行われます。

関連 EWIs

  1. SSC-FDM-0007:依存関係が欠落している要素。

  2. SSC-FDM-0019:セマティック情報をロードできませんでした。

テーブル

Teradata TABLE ステートメントをSnowflakeに変換するための翻訳リファレンス

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

Teradataの TABLE ステートメントはSnowflake TABLE 構文に翻訳されます。

Teradata TABLEs に関する詳細情報については、 こちら をご覧ください。

サンプルソースパターン

Simple Create​ Table

Teradata

テーブル
 CREATE TABLE table1, no fallback,
no before journal,
no after journal (
  c1 INTEGER NOT NULL,
	f1 INTEGER NOT NULL,
	p1 INTEGER NOT NULL,
  DATE,
  TIME,
	FOREIGN KEY(f1) REFERENCES WITH CHECK OPTION table2 (d1)
)
UNIQUE PRIMARY INDEX(c1)
PARTITION BY COLUMN(p1);
Copy

Snowflake

テーブル
CREATE OR REPLACE TABLE table1 (
	c1 INTEGER NOT NULL,
	f1 INTEGER NOT NULL,
	p1 INTEGER NOT NULL,
	DATE,
	TIME,
	FOREIGN KEY(f1) REFERENCES table2 (d1) ,
	UNIQUE (c1)
)
----** SSC-FDM-0038 - MICRO-PARTITIONING IS AUTOMATICALLY HANDLED ON ALL SNOWFLAKE TABLES **
--PARTITION BY COLUMN(p1)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "09/19/2025",  "domain": "no-domain-provided" }}'
;
Copy

Table Kind句 - SET および MULTISET

Teradataのkind句は、重複行が許されるか(MULTISET)、許されないか(SET)を決定します。

Teradata
テーブル
 -- Set semantics
CREATE SET TABLE table1 (
    column1 INTEGER
);

--Multiset semantics
CREATE MULTISET TABLE table2(
    column1 INTEGER
);
Copy
Snowflake
テーブル
 -- Set semantics
--** SSC-FDM-TD0024 - SET TABLE FUNCTIONALITY NOT SUPPORTED. TABLE MIGHT HAVE DUPLICATE ROWS **
CREATE OR REPLACE TABLE table1 (
    column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

--Multiset semantics
CREATE OR REPLACE TABLE table2 (
    column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

VolatileテーブルとGlobal Temporaryテーブル

TeradataのVolatileテーブルとGlobal Temporaryテーブルは、データの仮ストレージに使用されます。両者の違いは、Global Temporaryテーブルのテーブル定義(DDL)がData Dictionaryに保存されるのに対し、Volatileテーブルの定義は保存されない点にあります。

Teradata
テーブル
 --Global Temporary Table
CREATE MULTISET GLOBAL TEMPORARY TABLE table1 (
    column1 INTEGER
);

--Volatile Table
CREATE MULTISET VOLATILE TABLE table3 (
    column1 INTEGER
);
Copy
Snowflake
テーブル
 --Global Temporary Table
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE table1 (
    column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

--Volatile Table
CREATE OR REPLACE TEMPORARY TABLE table3 (
    column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

データあり、データなしオプション

Teradata

テーブル
 -- With data
CREATE TABLE table1 AS table2 WITH DATA

-- With no data
CREATE TABLE table1 AS table2 WITH NO DATA 
Copy

Snowflake

テーブル
 -- With data
CREATE OR REPLACE TABLE table1 CLONE table2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

-- With no data
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR table1. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE OR REPLACE TABLE table1 LIKE table2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

Snowflakeの予約済みおよび限定キーワード

SnowConvert AI は、予約キーワードに関連する課題に対処することで、Snowflakeへのシームレスな SQL 移行を促進します。Snowflakeの 予約および制限されたキーワードのドキュメント にあるように、特定のキーワードは特別な処理を行わない限り、列名、テーブル名、エイリアスとして使用することができません。 SnowConvert AI には、このような場合に SQL コードの互換性を確保する機能が含まれています。

列名としての予約済み ANSI キーワード

列名が** ANSI またはSnowflake** 予約キーワードにマッチする場合、 SnowConvert AI は自動的に列名を二重引用符( " )で囲み、Snowflakeの構文規則に準拠します。この調整により、これらの列名を持つクエリが、手作業を必要とせずにSnowflakeで正しくコンパイルされるようになります。

例:

テーブル
 CREATE TABLE ReservedKeywords (
  "CREATE" VARCHAR(50),
  FOLLOWING VARCHAR(50),
  "ILIKE" VARCHAR(50),
  RLIKE VARCHAR(50)
);
Copy

Snowflake

テーブル
 CREATE OR REPLACE TABLE ReservedKeywords (
    "CREATE" VARCHAR(50),
    "FOLLOWING" VARCHAR(50),
    "ILIKE" VARCHAR(50),
    "RLIKE" VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "11/28/2024",  "domain": "test" }}'
;
Copy

Snowflake固有の予約済みキーワード

Snowflake固有の予約キーワード(例: CONSTRAINTCURRENT_DATECURRENT_TIME )にマッチする列は、引用符で囲まれていてもコンパイルの問題が発生する可能性があります。 SnowConvert AI はこのようなインスタンスを検出し、コード SSC-EWI-0045 で警告を生成し、互換性のためにこれらの列の名前を見直し、変更するように促します。

例:

テーブル
 CREATE TABLE ColumnReservedNames (
  "CONSTRAINT" VARCHAR(50),
  "CURRENT_DATE" VARCHAR(50),
  "CURRENT_TIME" VARCHAR(50)
);
Copy

Snowflake

テーブル
 CREATE OR REPLACE TABLE ColumnReservedNames (
    !!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CONSTRAINT' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
    "CONSTRAINT" VARCHAR(50),
    !!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CURRENT_DATE' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
    "CURRENT_DATE" VARCHAR(50),
    !!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CURRENT_TIME' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
    "CURRENT_TIME" VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "11/28/2024",  "domain": "test" }}'
;
Copy

既知の問題

1.テーブル作成オプションがサポートされていません

「シンプルなテーブルの作成」の例に示すように、SnowflakeはTeradataのテーブル作成オプションをサポートしていません。それらは削除されました。

2.パフォーマンスの問題によるパーティション

「シンプルなテーブルの作成」の例では、パフォーマンスを考慮し、 partition by ステートメントを削除しています。

3.プライマリインデックスの移動

Teradataでは、プライマリインデックス制約は create table ステートメントの外側で宣言されますが、Snowflakeでは「シンプルなテーブルの作成」の例に示すように、内側で宣言する必要があります。

4.SET セマンティクスがサポートされていません

例「Table Kind句 - SET および MULTISET」に示すように、SnowflakeはTeradataの SET セマンティクスをサポートしていません。それらは削除されました。

5.Global Temporaryテーブルオプションはサポートされていません

例「VolatileテーブルとGlobal Temporaryテーブル」に示すように、SnowflakeはTeradataのGlobal Temporaryテーブルオプションをサポートしていません。削除されます。

6.Compressがサポートされていません

COMPRESS (value1. value2, value3) はサポートされていないため削除されました。

7.On commitがサポートされていません

On commit はサポートされていないため削除されました。

8.Block compressionがサポートされていません

Block compression はサポートされていないため削除されました。

9.Normalizeがサポートされていません

Normalize はサポートされていないため削除されました。

関連 EWIs

  1. SSC-FDM-0009: GLOBAL TEMPORARY TABLE 機能はサポートされていません。

  2. SSC-FDM-0019:セマティック情報をロードできませんでした。

  3. SSC-FDM-TD0024:セットテーブル機能はサポートされていません。

  4. SSC-PRF-0007: CLUSTER BY パフォーマンスレビュー。

  5. SSC-EWI-0045:列名はSnowflake予約キーワードです。

WITH DEFAULT

列定義のTeradata WITH DEFAULT 句をSnowflakeに変換するための翻訳リファレンス

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

Teradataの WITH DEFAULT 句は、値がない状態で挿入された列にシステムデフォルト値をセットします。この値は通常、ゼロまたは空に相当します。

構文:

 WITH DEFAULT
Copy

次のテーブルは、Teradataのデータ型、Snowflakeでの対応するデータ型、およびサポートされている場合にセットされるデフォルト値を示しています。

TeradataSnowflakeDefault Value
BLOB[(n)]BYTENOT SUPPORTED
BYTE[(n)]BYTENOT SUPPORTED
VARBYTE[(n)]BYTENOT SUPPORTED
BIGINTBIGINT0
BYTEINTBYTEINT0
DECIMAL [(n[,m])]DECIMAL0
DOUBLE PRECISIONDOUBLE PRECISION0
FLOATFLOAT0
INTEGERINTEGER0
NUMBER(n[,m])NUMBER0
NUMBER[(*[,m])]NUMBER0
NUMERIC [(n[,m])]NUMERIC0
REALREAL0
SMALLINTSMALLINT0
DATEDATECURRENT_DATE
TIME [(n)]TIMECURRENT_TIME
TIMESTAMP [(n)]TIMESTAMPCURRENT_TIMESTAMP
TIMESTAMP WITH TIME ZONETIMESTAMP_TZLOCALTIMESTAMP
INTERVAL DAY [(n)]VARCHAR(21)'0DAY'
INTERVAL DAY [(n)] TO HOURVARCHAR(21)'0DAY'
INTERVAL DAY [(n)] TO MINUTEVARCHAR(21)'0DAY'
INTERVAL DAY [(n)] TO SECONDVARCHAR(21)'0DAY'
INTERVAL HOUR [(n)]VARCHAR(21)'0HOUR'
INTERVAL HOUR [(n)] TO MINUTEVARCHAR(21)'0HOUR'
INTERVAL HOUR [(n)] TO SECONDVARCHAR(21)'0HOUR'
INTERVAL MINUTE [(n)]VARCHAR(21)'0MINUTE'
INTERVAL MINUTE [(n)] TO SECOND [(m)]VARCHAR(21)'0MINUTE'
INTERVAL MONTHVARCHAR(21)'0MONTH'
INTERVAL SECOND [(n,[m])]VARCHAR(21)'0SECOND'
INTERVAL YEAR [(n)]VARCHAR(21)'0YEAR'
INTERVAL YEAR [(n)] TO MONTHVARCHAR(21)'0YEAR'
CHAR[(n)]CHAR''
CHARACTER(n) CHARACTER SET GRAPHIC-NOT SUPPORTED
CLOB-NOT SUPPORTED
CHAR VARYING(n)VARCHAR''
LONG VARCHAR-NOT SUPPORTED
LONG VARCHAR CHARACTER SET GRAPHIC-NOT SUPPORTED
VARCHAR(n)VARCHAR''
VARCHAR(n) CHARACTER SET GRAPHIC-NOT SUPPORTED
PERIOD(DATE)VARCHAR(24)NOT SUPPORTED
PERIOD(TIME [(n)])VARCHAR(24)NOT SUPPORTED
PERIOD(TIMESTAMP [(n)])VARCHAR(24)NOT SUPPORTED

サンプルソースパターン

Teradata

クエリ
 CREATE TABLE SAMPLE_TABLE
(
    ID INT,

    -- Numeric Types
    big_integer_col BIGINT WITH DEFAULT,
    byteint_col BYTEINT WITH DEFAULT,
    decimal_col DECIMAL(10,2) WITH DEFAULT,
    double_precision_col DOUBLE PRECISION WITH DEFAULT,
    float_col FLOAT WITH DEFAULT,
    integer_col INTEGER WITH DEFAULT,
    number_col NUMBER WITH DEFAULT,
    numeric_col NUMERIC(10,2) WITH DEFAULT,
    real_col REAL WITH DEFAULT,
    smallint_col SMALLINT WITH DEFAULT,

    -- Character Types
    char_col CHAR(50) WITH DEFAULT,
    character_col CHARACTER(50) WITH DEFAULT,
    --clob_col CLOB,
    char_varying_col CHAR VARYING(100) WITH DEFAULT,
    --long_varchar_col LONG VARCHAR WITH DEFAULT,
    --long_varchar_graphic_col LONG VARCHAR CHARACTER SET GRAPHIC WITH DEFAULT,
    varchar_col VARCHAR(255) WITH DEFAULT,
    --varchar_graphic_col VARCHAR(255) CHARACTER SET GRAPHIC WITH DEFAULT,

    -- Date and Time Types
    date_col DATE WITH DEFAULT,
    time_col TIME WITH DEFAULT,
    time_precision_col TIME(6) WITH DEFAULT,
    timestamp_col TIMESTAMP WITH DEFAULT,
    timestamp_precision_col TIMESTAMP(6) WITH DEFAULT,
    tz_timestamp_col TIMESTAMP WITH TIME ZONE WITH DEFAULT,
    tz_timestamp_precision_col TIMESTAMP(6) WITH TIME ZONE WITH DEFAULT,    
    interval_col INTERVAL DAY(4) WITH DEFAULT,
    interval_day_to_hour_col INTERVAL DAY(4) TO HOUR WITH DEFAULT,
    interval_hour_col INTERVAL HOUR(2) WITH DEFAULT,
    interval_minute_col INTERVAL MINUTE(2) WITH DEFAULT,
    interval_month_col INTERVAL MONTH WITH DEFAULT,
    interval_second_col INTERVAL SECOND(2) WITH DEFAULT,
    interval_year_col INTERVAL YEAR(4) WITH DEFAULT,

    -- Binary Types
    -- blob_col BLOB(1000),
    byte_col BYTE(1000) WITH DEFAULT,
    varbyte_col VARBYTE(1000) WITH DEFAULT
);
Copy
Snowflake
クエリ
 CREATE OR REPLACE TABLE SAMPLE_TABLE
(
    ID INT,
    -- Numeric Types
    big_integer_col BIGINT DEFAULT 0,
    byteint_col BYTEINT DEFAULT 0,
    decimal_col DECIMAL(10,2) DEFAULT 0,
    double_precision_col DOUBLE PRECISION DEFAULT 0,
    float_col FLOAT DEFAULT 0,
    integer_col INTEGER DEFAULT 0,
    number_col NUMBER(38, 18) DEFAULT 0,
    numeric_col NUMERIC(10,2) DEFAULT 0,
    real_col REAL DEFAULT 0,
    smallint_col SMALLINT DEFAULT 0,
    -- Character Types
    char_col CHAR(50) DEFAULT '',
    character_col CHARACTER(50) DEFAULT '',
    --clob_col CLOB,
    char_varying_col CHAR VARYING(100) DEFAULT '',
    --long_varchar_col LONG VARCHAR WITH DEFAULT,
    --long_varchar_graphic_col LONG VARCHAR CHARACTER SET GRAPHIC WITH DEFAULT,
    varchar_col VARCHAR(255) DEFAULT '',
    --varchar_graphic_col VARCHAR(255) CHARACTER SET GRAPHIC WITH DEFAULT,

    -- Date and Time Types
    date_col DATE DEFAULT CURRENT_DATE,
    time_col TIME DEFAULT CURRENT_TIME,
    time_precision_col TIME(6) DEFAULT CURRENT_TIME(6),
    timestamp_col TIMESTAMP
--                            !!!RESOLVE EWI!!! /*** SSC-EWI-0013 - EXCEPTION THROWN WHILE CONVERTING ITEM: Mobilize.T12Data.Sql.Ast.TdWithDefaultAttribute. LINE: 31 OF FILE: /Users/hbadillabonilla/Documents/Workspace/migrations-snowconvert/Tools/DocVerifier/out/temp/CUebOYutwG1Dca8jb0Fo/8921d487/SOURCE/Teradata_01.sql ***/!!!
--                            WITH DEFAULT
                                        ,
    timestamp_precision_col TIMESTAMP(6)
--                                         !!!RESOLVE EWI!!! /*** SSC-EWI-0013 - EXCEPTION THROWN WHILE CONVERTING ITEM: Mobilize.T12Data.Sql.Ast.TdWithDefaultAttribute. LINE: 32 OF FILE: /Users/hbadillabonilla/Documents/Workspace/migrations-snowconvert/Tools/DocVerifier/out/temp/CUebOYutwG1Dca8jb0Fo/8921d487/SOURCE/Teradata_01.sql ***/!!!
-- WITH DEFAULT
             ,
    tz_timestamp_col TIMESTAMP_TZ
--                                  WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'TIMESTAMP WITH TIME ZONE' NOT SUPPORTED IN SNOWFLAKE ***/!!!
                                                                                                                        ,
    tz_timestamp_precision_col TIMESTAMP_TZ(6)
--                                               WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'TIMESTAMP(6) WITH TIME ZONE' NOT SUPPORTED IN SNOWFLAKE ***/!!!
                                                                                                                           ,
    interval_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY(4) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0DAY',
    interval_day_to_hour_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY(4) TO HOUR DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0DAY',
    interval_hour_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL HOUR(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0HOUR',
    interval_minute_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MINUTE(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0MINUTE',
    interval_month_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0MONTH',
    interval_second_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL SECOND(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0SECOND',
    interval_year_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR(4) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0YEAR',
    -- Binary Types
    -- blob_col BLOB(1000),
    byte_col BINARY
--                    WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'BYTE(1000)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
                                                                                                          ,
    varbyte_col BINARY(1000)
--                             WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'VARBYTE(1000)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
)
Copy

既知の問題

1.サポートされていない型

説明テーブルのテーブルに示されているように、いくつかの型はサポートされておらず、 WITH DEFAULT 句を変換してもデフォルト値はセットされません。

関連 EWIs

  1. SSC-EWI-0021:Snowflakeではサポートされていません。

  2. SSC-EWI-0036: データ型が別のデータ型に変換されました。

CREATE MACRO

Teradata CREATE MACRO をSnowflakeスクリプトに変換するための翻訳リファレンス

説明

Teradata CREATE MACRO は、よく使用されるステートメントや複雑な操作を実行するステートメントを1つ以上定義しているため、同じステートメントのシーケンスを何度も記述する必要がありません。マクロは、 EXECUTE ステートメントから呼び出されると実行されます。

CREATE MACRO の詳細は こちら をクリックしてください。

 CREATE MACRO <macroname> [(parameter1, parameter2,...)] ( 
   <sql_statements> 
);

[ EXECUTE | EXEC ] <macroname>;
Copy

サンプルソースパターン

セットアップデータ

このセクションのサンプルパターンを実行するには、以下のコードが必要です。

Teradata
 CREATE TABLE DEPOSIT
(
    ACCOUNTNO NUMBER,
    ACCOUNTNAME VARCHAR(100)
);

INSERT INTO DEPOSIT VALUES (1, 'Account 1');
INSERT INTO DEPOSIT VALUES (2, 'Account 2');
INSERT INTO DEPOSIT VALUES (3, 'Account 3');
INSERT INTO DEPOSIT VALUES (4, 'Account 4');
Copy
Snowflake
 CREATE OR REPLACE TABLE DEPOSIT
(
    ACCOUNTNO NUMBER(38, 18),
    ACCOUNTNAME VARCHAR(100)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO DEPOSIT
VALUES (1, 'Account 1');

INSERT INTO DEPOSIT
VALUES (2, 'Account 2');

INSERT INTO DEPOSIT
VALUES (3, 'Account 3');

INSERT INTO DEPOSIT
VALUES (4, 'Account 4');
Copy

基本マクロ

Snowflakeにはマクロオブジェクトがないため、変換ツールはTeradataマクロをSnowflake Scriptingストアドプロシージャに変換します。また、Snowflake Scriptingでは、返される結果セットの機能を複製するために、マクロからデータセットを返すクエリが RESULTSET 変数に割り当てられ、それが返されます。

Teradata
クエリ
 REPLACE MACRO DEPOSITID (ID INT)
AS
(
  SELECT * FROM DEPOSIT WHERE ACCOUNTNO=:ID;
);

EXECUTE DEPOSITID(2);
Copy
結果
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 2            | Account 2    |
+--------------+--------------+

Copy
Snowflake Scripting
クエリ
 CREATE OR REPLACE PROCEDURE DEPOSITID (ID FLOAT)
RETURNS TABLE ()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        LET res RESULTSET := (SELECT * FROM DEPOSIT WHERE ACCOUNTNO=:ID);
        RETURN TABLE(res);
    END;
$$;

CALL DEPOSITID(2);
Copy
結果
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 2            | Account 2    |
+--------------+--------------+

Copy

マクロが別のマクロを呼び出す

SnowConvert AI は、マクロが別のマクロを呼び出すシナリオをサポートしており、他律性によって、Snowflakeの RESULT_SCAN(LAST_QUERY_ID()) から結果を取得して結果セットが返されます。

Teradata
クエリ
 REPLACE MACRO MacroCallOtherMacro (ID INT)
AS
(
    EXECUTE DEPOSITID(:ID);
);

EXECUTE MacroCallOtherMacro(2);
Copy
結果
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 2            | Account 2    |
+--------------+--------------+

Copy
Snowflake Scripting
クエリ
 CREATE OR REPLACE PROCEDURE MacroCallOtherMacro (ID FLOAT)
RETURNS TABLE (
)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "09/09/2024" }}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        CALL DEPOSITID(:ID);
        LET res RESULTSET :=
        (
            SELECT
                *
            FROM
                TABLE(RESULT_SCAN(LAST_QUERY_ID()))
        );
        RETURN TABLE(res);
    END;
$$;

CALL MacroCallOtherMacro(2);
Copy
結果
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 2            | Account 2    |
+--------------+--------------+

Copy

結果セットのないマクロ

すべてのマクロが結果セットを返すわけではありません。前述のシナリオにも対応しています。

Teradata
クエリ
 REPLACE MACRO MacroWithoutSelect (ACCOUNTNO NUMBER, ACCOUNTNAME VARCHAR(100))
AS
(
  INSERT INTO DEPOSIT VALUES (:ACCOUNTNO, :ACCOUNTNAME);
);

EXECUTE MacroWithoutSelect(5, 'Account 5');
SELECT * FROM DEPOSIT;
Copy
結果
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 1            | Account 1    |
+--------------+--------------+
| 2            | Account 2    |
+--------------+--------------+
| 3            | Account 3    |
+--------------+--------------+
| 4            | Account 4    |
+--------------+--------------+
| 5            | Account 5    |
+--------------+--------------+

Copy
Snowflake Scripting
クエリ
 CREATE OR REPLACE PROCEDURE MacroWithoutSelect (ACCOUNTNO FLOAT, ACCOUNTNAME VARCHAR(100))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        INSERT INTO DEPOSIT
        VALUES (:ACCOUNTNO, :ACCOUNTNAME);
    END;
$$;

CALL MacroWithoutSelect(5, 'Account 5');
SELECT * FROM DEPOSIT;
Copy
結果
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 1            | Account 1    |
+--------------+--------------+
| 2            | Account 2    |
+--------------+--------------+
| 3            | Account 3    |
+--------------+--------------+
| 4            | Account 4    |
+--------------+--------------+
| 5            | Account 5    |
+--------------+--------------+

Copy

マクロは複数の結果セットを返します

Teradataでは、マクロは1つのマクロから複数の結果セットを返すことができます。

Snowflake Scriptingプロシージャでは、1つのプロシージャにつき1つの結果セットしか返すことができません。Teradataの動作を複製するために、返す結果セットが2つ以上ある場合、それらは仮テーブルに格納されます。Snowflake Scriptingプロシージャは、仮テーブルの名前を含む配列を返します。

Teradata
クエリ
 REPLACE MACRO DEPOSITID (ID INT)
AS
(
  SELECT * FROM DEPOSIT WHERE ACCOUNTNO=4;
  SELECT * FROM DEPOSIT WHERE ACCOUNTNO=:ID;
  EXECUTE DEPOSITID(:ID);
);

EXECUTE DEPOSITID(2);
Copy
結果セット1
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 4            | Account 4    |
+--------------+--------------+

Copy
結果セット2
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 2            | Account 2    |
+--------------+--------------+

Copy
Snowflake Scripting
クエリ
 CREATE OR REPLACE PROCEDURE DEPOSITID (ID FLOAT)
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "09/09/2024" }}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    return_arr ARRAY := array_construct();
    tbl_nm VARCHAR;
  BEGIN
    tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
    CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
      SELECT
        * FROM
        DEPOSIT
      WHERE ACCOUNTNO=4;
    return_arr := array_append(return_arr, :tbl_nm);
    tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
    CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
      SELECT
        * FROM
        DEPOSIT
      WHERE ACCOUNTNO=:ID;
    return_arr := array_append(return_arr, :tbl_nm);
    CALL DEPOSITID(:ID);
    tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
    CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
      SELECT
        *
      FROM
        TABLE(RESULT_SCAN(LAST_QUERY_ID()));
    return_arr := array_append(return_arr, :tbl_nm);
    --** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
    RETURN return_arr;
  END;
$$;

CALL DEPOSITID(2);
Copy
結果セット1
+-----------------------------------------------------+
| DEPOSIDID                                           |
|-----------------------------------------------------|
| [                                                   |
|  "RESULTSET_93D50CBB_F22C_418A_A88C_4E1DE101B500",  |
|  "RESULTSET_6BDE39D7_0554_406E_B52F_D9E863A3F15C"   |
| ]                                                   |
+-----------------------------------------------------+

Copy
結果セットの可視化

上記のプロシージャをSnowflake上で実行すると、仮テーブル名が格納された配列が返されます。

[ "RESULTSET_93D50CBB_F22C_418A_A88C_4E1DE101B500", "RESULTSET_6BDE39D7_0554_406E_B52F_D9E863A3F15C"]

Teradataのように結果セットを表示するには、以下のクエリを実行する必要があります。

クエリ
 SELECT * FROM table('RESULTSET_93D50CBB_F22C_418A_A88C_4E1DE101B500');
SELECT * FROM table('RESULTSET_6BDE39D7_0554_406E_B52F_D9E863A3F15C');
Copy
結果セット1
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 4            | Account 4    |
+--------------+--------------+

Copy
結果セット2
+--------------+--------------+
| ACCOUNTNO    | ACCOUNTNAME  |
|--------------+--------------|
| 2            | Account 2    |
+--------------+--------------+

Copy

既知の問題

問題は見つかりませんでした。

関連 EWIs

CREATE PROCEDURE

Teradata CREATE PROCEDURE をSnowflakeスクリプトに変換するための翻訳リファレンス

説明

Teradataの CREATE PROCEDURE および REPLACE PROCEDURE ステートメントは、ストアドプロシージャの実装を生成または置換し、コンパイルします。

CREATE PROCEDURE または REPLACE PROCEDURE の詳細情報は こちらをクリックしてください

 -- Create/replace procedure syntax
{CREATE | REPLACE} PROCEDURE [database_name. | user_name.] procedure_name
    ([<parameter_definition>[, ...n]])
[<SQL_data_access>]
[DYNAMIC RESULT SETS number_of_sets]
[SQL SECURITY <privilege_option>]
statement;


<parameter_definition> := [IN | OUT | INOUT] parameter_name data_type 

<SQL_data_access> := {CONTAINS SQL | MODIFIES SQL DATA | READS SQL DATA}

<privilege_option> := {CREATOR | DEFINER | INVOKER | OWNER}
Copy

サンプルソースパターン

セットアップデータ

このセクションのサンプルパターンを実行するには、以下のコードが必要です。

Teradata
 CREATE TABLE inventory (
    product_name VARCHAR(50),
    price INTEGER
);

INSERT INTO inventory VALUES ('Bread', 50);
INSERT INTO inventory VALUES ('Tuna', 150);
INSERT INTO inventory VALUES ('Gum', 20);
INSERT INTO inventory VALUES ('Milk', 80);
Copy
Snowflake
 CREATE OR REPLACE TABLE inventory (
    product_name VARCHAR(50),
    price INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO inventory
VALUES ('Bread', 50);

INSERT INTO inventory
VALUES ('Tuna', 150);

INSERT INTO inventory
VALUES ('Gum', 20);

INSERT INTO inventory
VALUES ('Milk', 80);
Copy

基本プロシージャ

Teradata
クエリ
 REPLACE PROCEDURE BasicProcedure(IN counterValue INTEGER)
BEGIN
    DECLARE productName VARCHAR(50);
    DECLARE productPrice INTEGER DEFAULT 0;
    DECLARE whileCounter INTEGER DEFAULT 0;
    SET productName = 'Salt';
    WHILE (whileCounter < counterValue) DO
        SET productPrice = 10 + productPrice;
        SET whileCounter = whileCounter + 1;
    END WHILE;
    INSERT INTO inventory VALUES (productName, productPrice);
END;

CALL BasicProcedure(5);
SELECT product_name, price FROM inventory WHERE product_name = 'Salt';
Copy
結果
+--------------+--------------+
| product_name |    price     |
|--------------+--------------|
| Salt         | 50           |
+--------------+--------------+

Copy
Snowflake Scripting
クエリ
 CREATE OR REPLACE PROCEDURE BasicProcedure (COUNTERVALUE INTEGER)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/10/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        productName VARCHAR(50);
        productPrice INTEGER DEFAULT 0;
        whileCounter INTEGER DEFAULT 0;
    BEGIN
         
         
         
        productName := 'Salt';
            WHILE (:whileCounter < :counterValue) LOOP
            productPrice := 10 + productPrice;
            whileCounter := whileCounter + 1;
        END LOOP;
        INSERT INTO inventory
        VALUES (:productName, :productPrice);
    END;
$$;

CALL BasicProcedure(5);

SELECT
    product_name,
    price FROM
    inventory
WHERE
    UPPER(RTRIM( product_name)) = UPPER(RTRIM('Salt'));
Copy
結果
+--------------+--------------+
| product_name |    price     |
|--------------+--------------|
| Salt         | 50           |
+--------------+--------------+

Copy

単一のoutパラメーター

Teradata
クエリ
 REPLACE PROCEDURE procedureLabelSingle(OUT Message VARCHAR(100))
BEGIN
    set Message = 'Assignment value. Thanks';
END;

CALL procedureLabelSingle(?);
Copy
結果
Message                 |
------------------------+
Assignment value. Thanks|

Copy
Snowflake Scripting
クエリ
 CREATE OR REPLACE PROCEDURE procedureLabelSingle (MESSAGE OUT VARCHAR(100))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/23/2024" }}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        Message := 'Assignment value. Thanks';
    END;
$$;

CALL procedureLabelSingle(?);
Copy
結果
+───────────────────────────────+
| PROCEDURELABELSINGLE          |
+───────────────────────────────+
| ""Assignment value. Thanks""  |
+───────────────────────────────+

Copy

複数のoutパラメーター

Teradata
クエリ
 REPLACE PROCEDURE procedureLabelMultiple(OUT Message VARCHAR(100), OUT Message2 VARCHAR(100))
BEGIN
    set Message = 'Assignment value. Thanks';
    set Message2 = 'Assignment value2. Thanks';
END;

CALL procedureLabelSingle(?, ?);
Copy
結果
1                       |2                        |
------------------------+-------------------------+
Assignment value. Thanks|Assignment value2. Thanks|

Copy
Snowflake Scripting
クエリ
 CREATE OR REPLACE PROCEDURE procedureLabelMultiple (MESSAGE OUT VARCHAR(100), MESSAGE2 OUT VARCHAR(100))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        Message := 'Assignment value. Thanks';
        Message2 := 'Assignment value2. Thanks';
    END;
$$;

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "procedureLabelSingle" **
CALL procedureLabelSingle(?, ?);
Copy
結果
+─────────────────────────+────────────────────────────────+
| PROCEDURELABELMULTIPLE  |                                |
+─────────────────────────+────────────────────────────────+
| "{                      |                                |
| ""Message""             | ""Assignment value. Thanks"",  |
| ""Message2""            | ""Assignment value2. Thanks""  |
| }"                      |                                |
+─────────────────────────+────────────────────────────────+


Copy

動的な結果セットを持つ複数のoutパラメーター

Teradata
クエリ
 REPLACE PROCEDURE Procedure1(out product_name VARCHAR(50), out price integer)
DYNAMIC RESULT SETS 2
BEGIN
	DECLARE result_set CURSOR WITH RETURN ONLY FOR
	SELECT * FROM inventory;
    DECLARE result_set2 CURSOR WITH RETURN ONLY FOR
	SELECT * FROM inventory;
    SET price = 100;
    SET product_name = 'another2';
	OPEN result_set2;
	OPEN result_set;
END;

REPLACE PROCEDURE Procedure2()
BEGIN
 DECLARE price INTEGER;
 DECLARE productName varchar(10);
 CALL Procedure1(productName, price);
 INSERT INTO inventory VALUES(:productName, :price);
END;

CALL Procedure2();
Copy
結果
Snowflake Scripting
クエリ
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "inventory" **
CREATE OR REPLACE PROCEDURE Procedure1 (PRODUCT_NAME OUT VARCHAR(50), PRICE OUT integer)
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		tbl_result_set VARCHAR;
		tbl_result_set2 VARCHAR;
		return_arr ARRAY := array_construct();
	BEGIN
		tbl_result_set := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
		CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_result_set) AS
			SELECT
				* FROM
				inventory;
		LET result_set CURSOR
		FOR
			SELECT
				*
			FROM
				IDENTIFIER(?);
		tbl_result_set2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
		CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_result_set2) AS
			SELECT
				* FROM
				inventory;
		LET result_set2 CURSOR
		FOR
			SELECT
				*
			FROM
				IDENTIFIER(?);
				price := 100;
				product_name := 'another2';
				OPEN result_set2 USING (tbl_result_set2);
				return_arr := array_append(return_arr, :tbl_result_set2);
				OPEN result_set USING (tbl_result_set);
				return_arr := array_append(return_arr, :tbl_result_set);
				--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
				RETURN return_arr;
	END;
$$;

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "inventory" **
CREATE OR REPLACE PROCEDURE Procedure2 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
	DECLARE
				price INTEGER;
				productName varchar(10);
	BEGIN
				 
				 
				CALL Procedure1(:productName, :price);
				INSERT INTO inventory
				VALUES (:productName, :price);
	END;
$$;

CALL Procedure2();
Copy

既知の問題

1.SQL データアクセス

デフォルトでは、Snowflakeプロシージャは、データの読み取りや変更ステートメントを含む、あらゆる種類の SQL ステートメントの実行をサポートしており、 SQL データアクセス句は関係ありません。この句はプロシージャの変換時には無視されます。

2.アセスメントレポートの最上位オブジェクト

ストアドプロシージャ内の要素(仮テーブルまたはビュー)が、アセスメントレポートで最上位オブジェクトとしてカウントされています。SnowConvert AI チームは現在、このシナリオの修正に取り組んでいます。

関連 EWIs

  1. SSC-EWI-0073: 機能等価性レビュー保留中。

  2. SSC-FDM-0020:複数の結果セットが仮テーブルに返されます。