SnowConvert AI:一般的な問題

SSC-EWI-0001

ソースコードの行で認識できないトークン。

注釈

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

重大性

重大

説明

この問題は、変換中のソースコードの解析中にエラーが発生した場合に発生します。ソースコードの構文エラーがあるか、コードの特定のステートメントがまだ認識されていないことを意味します。

コード例

次の例は、入力に無効な構文が置かれた場合のさまざまな解析エラーシナリオを示しています。メッセージがシナリオごとにどのように異なるかに注意してください。これらの内容は、問題を特定して解決するのに役立つ場合があります。詳しくは下記の「メッセージの内容」をご覧ください。

入力コード:
 CRATE;

CREATE TABLE someTable(col1 INTEGER, !);

CREATE TABRE badTable(col1 INTEGER);

CREATE PROCEDURE proc1()
BEGIN
    CREATE TABLE badEmbeddedTable(col1 INTEGER);
END;
Copy
生成コード:
 -- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '1' COLUMN '1' OF THE SOURCE CODE STARTING AT 'CRATE'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'CRATE' ON LINE '1' COLUMN '1'. **
--CRATE
     ;

CREATE OR REPLACE TABLE someTable (
    col1 INTEGER
--                ,
                 
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '3' COLUMN '37' OF THE SOURCE CODE STARTING AT '!'. EXPECTED 'Column Definition' GRAMMAR. LAST MATCHING TOKEN WAS ',' ON LINE '3' COLUMN '35'. FAILED TOKEN WAS '!' ON LINE '3' COLUMN '37'. **
--                  !
                   )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/04/2024" }}'
;

-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '5' COLUMN '1' OF THE SOURCE CODE STARTING AT 'CREATE'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'CREATE' ON LINE '5' COLUMN '1'. **
--CREATE TABRE badTable(col1 INTEGER)
                                   ;

CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/04/2024" }}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        CREATE OR REPLACE TABLE badEmbeddedTable (
            col1 INTEGER);
    END;
$$;
Copy

メッセージコンテンツ

  1. 開始句:認識できないコードの開始位置(行、列、「テキスト」)を指定します。コードは、パーサーが回復可能なポイントを見つけるまで、認識できない要素ごとに「テキスト」要素からコメントされます。

  2. 予期される文法句:パーサーが予期していた文法の型を指定します。コメントされたコードに、期待される文法と一致する型があるかどうかをチェックします。

  3. 最後に一致するトークン句(OPTIONAL):未認識のコードが部分的に認識された場合に表示されることがあります。これは、パーサーが有効な要素を認識するまでのポイントを示すため、コメント付きコード内の次のトークンをチェックして、有効であることを確認します。

  4. 失敗したトークン句(OPTIONAL):「最後に一致するトークン句」が存在する場合のみ表示される可能性があります。これは、パーサーが最終的にコードが無効または認識されないと判断したポイントを表します。この要素がこの構文上の場所に配置できることを確認してください。

非推奨メッセージ内容

注釈

このリストの項目は現在は使用されていないため、履歴を残す目的でここに残されています。

  1. 復旧コード(DEPRECATED):これはエラーコードとして使われることを意図しており、パーサーのアップグレードリクエスト時に、より良いサポートのために提供される場合があります。パーサーがどのように復旧メカニズムを起動させたかを表します。

ベストプラクティス

  • ソースコードの構文が正しいかどうかをチェックします。

  • このメッセージは、問題の切り分けと解決に利用できます。

  • 構文がサポートされていない場合は、サポートされている構文に手動で変更することができます。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0002

デフォルトパラメーターの並び替えが必要な場合があります

重大性

説明

デフォルトパラメーターの並び替えが必要な場合があります。Snowflakeは、パラメーター宣言の末尾にあるデフォルトパラメーターのみをサポートしています。

コード例

入力コード:
 CREATE PROCEDURE MySampleProc
    @Param1 NVARCHAR(50) = NULL,
    @Param2 NVARCHAR(10),
    @Param3 NVARCHAR(10) = NULL,
    @Param4 NVARCHAR(10)
AS   
    SELECT 1;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE MySampleProc
!!!RESOLVE EWI!!! /*** SSC-EWI-0002 - DEFAULT PARAMETERS MAY NEED TO BE REORDERED. SNOWFLAKE ONLY SUPPORTS DEFAULT PARAMETERS AT THE END OF THE PARAMETERS DECLARATIONS ***/!!!
(PARAM1 STRING DEFAULT NULL, PARAM2 STRING, PARAM3 STRING DEFAULT NULL, PARAM4 STRING)
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        ProcedureResultSet RESULTSET;
    BEGIN
        ProcedureResultSet := (
        SELECT 1);
        RETURN TABLE(ProcedureResultSet);
    END;
$$;
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0003

組み込みオブジェクトのシステム列が変換されていません。

重大度

説明

このEWI は、SnowConvert AI が組み込みシステムオブジェクト(テーブル、ビュー)をSnowflakeと同等のオブジェクトにマップしたが、その内部列の1つにマップがない場合に生成されます。

コード例

入力コード:

select name, 
       parent_object_id
    from sys.tables;
Copy

出力コード:

Snowflake
select
    TABLE_NAME,
       parent_object_id !!!RESOLVE EWI!!! /*** SSC-EWI-0003 - SYSTEM COLUMN 'parent_object_id' FOR BUILT-IN OBJECT 'SYS.TABLES' HAS NOT BEEN TRANSLATED. ***/!!!
    from
    INFORMATION_SCHEMA.TABLES;
Copy

SSC-EWI-0005

重大性

重大

説明

この問題は、ソースコードを変換しようとすると予期しない変換エラーが発生し、出力コードファイルを生成できない場合に発生します。

ベストプラクティス

  • 問題の詳細については、エラーログファイルを確認してください。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0006

現在の日付/数値形式は、Snowflakeでは異なる動作をする可能性があります。

重大性

説明

このエラーは、Snowflakeがソース言語でサポートされている日付/数値形式を一部の関数でサポートしていないために追加されました。

以下の形式要素は、[Snowflake](https://docs.snowflake.com/ja/sql-reference/functions-conversion#label-date-time-format-conversion)で異なる動作をする可能性があります。

レッドシフト日時

Format ElementDescription
HHHour of day (01–12).
MSMillisecond (000–999).
USMicrosecond (000000–999999).
SSSS, SSSSSSeconds past midnight (0–86399).
Y,YYYYear (4 or more digits) with comma.
YYYLast 3 digits of year.
YLast digit of year.
IYYYISO 8601 week-numbering year(4 or more digits).
IYYLast 3 digits of ISO 8601 week-numbering year.
IYLast 2 digits of ISO 8601 week-numbering year.
ILast digit of ISO 8601 week-numbering year.
BC, bc, AD or adEra indicator (without periods).
B.C., b.c., A.D. or a.d.Era indicator (with periods).
MONTHFull upper case month name (blank-padded to 9 chars).
MonthFull capitalized month name (blank-padded to 9 chars).
monthFull lower case month name (blank-padded to 9 chars).
DAYFull upper case day name (blank-padded to 9 chars).
DayFull capitalized day name (blank-padded to 9 chars).
dayFull lower case day name (blank-padded to 9 chars).
DDDDay of year (001–366).
IDDDDay of ISO 8601 week-numbering year (001–371; day 1 of the year is Monday of the first ISO week).
DDay of the week, Sunday (1) to Saturday (7).
IDISO 8601 day of the week, Monday (1) to Sunday (7).
WWeek of month (1–5) (the first week starts on the first day of the month).
WWWeek number of year (1–53) (the first week starts on the first day of the year).
IWWeek number of ISO 8601 week-numbering year (01–53; the first Thursday of the year is in week 1).
CCCentury (2 digits) (the twenty-first century starts on 2001-01-01).
JJulian Date.
QQuarter.
RMMonth in upper case Roman numerals (I–XII; I=January).
rmMonth in lower case Roman numerals (i–xii; i=January).
TZUpper case time-zone abbreviation (only supported in to_char).
tzLower case time-zone abbreviation (only supported in to_char).
TZHTime-zone hours.
TZMTime-zone minutes.
OFTime-zone offset from UTC (only supported in to_char).
FM prefixFill mode (suppress leading zeroes and padding blanks).
TH suffixUpper case ordinal number suffix.
th suffixLower case ordinal number suffix.
FX prefixFixed format global option (see usage notes).
TM prefixTranslation mode (use localized day and month names based on lc_time).
SP suffixSpell mode.

注釈

詳しくは[PostgreSQL 日付/時刻形式](https://www.postgresql.org/docs/current/functions-formatting.html#FUNCTIONS-FORMATTING-DATETIME-TABLE)をご参照ください。

注釈

TO_CHAR 関数の変換は、この形式要素のほとんどをサポートしています。 サポートされている形式要素の完全なリストと同等のマッピングについては、[変換仕様書](../../../../translation-references/redshift/redshift-functions.md#for-datetime-values)を参照してください。

BigQuery 形式

詳しいリストは[こちら](https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements)をご覧ください。

数値

パターン

説明

PR

角括弧内の負の値

RN

ローマ数字(1~3999の間で入力)

TH またはth

序数のサフィックス

V

シフト指定桁数(ノート参照)

EEEE

科学的記数法の指数

注釈

詳しくは[PostgreSQL 数値形式](https://www.postgresql.org/docs/current/functions-formatting.html#FUNCTIONS-FORMATTING-NUMERIC-TABLE)をご参照ください。

コード例

入力コード:
PostgreSQL
 SELECT 
   DATE_TRUNC('decade', TIMESTAMP '2017-03-17 02:09:30'),
   DATE_TRUNC('century', TIMESTAMP '2017-03-17 02:09:30'),
   DATE_TRUNC('millennium', TIMESTAMP '2017-03-17 02:09:30');
Copy
生成されたコード:
Snowflake
 SELECT
      !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - DECADE FORMAT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
      DATE_TRUNC('decade', TIMESTAMP '2017-03-17 02:09:30'),
      !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - CENTURY FORMAT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
      DATE_TRUNC('century', TIMESTAMP '2017-03-17 02:09:30'),
      !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - MILLENNIUM FORMAT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
      DATE_TRUNC('millennium', TIMESTAMP '2017-03-17 02:09:30');
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0007

重大性

重大

説明

このエラーは、出力ファイルの書き込みにエラーが発生した場合に表示されます。

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0008

COLLATE 句は、Snowflakeでは異なる動作をする可能性があります。

重大性

説明

この警告は、collat​​e句が列オプションとして使用される場合に追加されます。これは、Snowflakeではサポートされていますが、collat​​e仕様では異なる動作をする可能性があるためです。Snowflakeでサポートされている指定子を確認するには、[collateドキュメント](https://docs.snowflake.com/ja/sql-reference/collation#label-collation-specification)を確認してください。

コード例

入力コード:
 CREATE TABLE TABLE01 (
    col1 text COLLATE "C"
);
Copy
生成コード:
 CREATE TABLE TABLE01 (
    col1 text
              !!!RESOLVE EWI!!! /*** SSC-EWI-0008 - COLLATE CLAUSE MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!! COLLATE "C"
);
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0009

Regexp_Substr関数は POSIX 正規表現のみをサポートしています。

重大性

説明

現在、Snowflakeでは[POSIX 基本正規表現構文](https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended)を超える拡張正規表現はサポートされていません。

この EWI は、 REGEX_SUBSTR、REGEX_REPLACE、 または REGEX_INSTR への関数呼び出しが SnowFlake に変換されるたびに追加され、サポートされていない可能性のある正規表現についてユーザーに警告します。サポートされていない 関数には、先読み、後読み、非キャプチャグループがあります。

コード例

入力コード:
 SELECT REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Copy
生成されたコード:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0009 - REGEXP_SUBSTR FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Copy

ベストプラクティス

  • それぞれのケースで使われている正規表現をチェックし、手作業が必要かどうかを判断します。SnowFlake の拡張正規表現サポートとその代替についての詳細は、[こちら](https://community.snowflake.com/s/question/0D50Z00007ENLKsSAP/expanded-support-for-regular-expressions-regex)を参照してください。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0010

重大性

重大

説明

このエラーは、特定のプロシージャステートメントに対する変換ルールが存在しない場合に表示されます。

ベストプラクティス

  • プロシージャステートメントが正しいかどうかをチェックします。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0011

重大性

説明

このエラーは、ソースコード中に予期せぬステートメントの終了があり、そのエラーを正しく処理できない場合に表示されます。

ベストプラクティス

  • ソースコードが不完全でないか、変換されるステートメントが正しく終了しているかをチェックします。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0012

重大性

説明

このエラーは、ソースコード中に予期せぬステートメントの終了がある場合に表示されます

コード例

入力コード:
 CREATE VOLATILE SET TABLE VOLATILETABLE
(
    COL1                    INTEGER,
    COL2                    INTEGER,
    COL3                    INTEGER
)
ON COMMIT PRESERVE ROWS;
UPDATE TABLE2 as T2
SET T2.COL1 + VOLATILETABLE.COL1
WHERE T2.COL2 = VOLATILETABLE.COL2
    AND T2.COL3 = VOLATILETABLE.COL3
    AND     T2.COL4 = ( SELECT MAX(T3.COL1) 
                                   FROM
                                   TABLE3 T3
                                   WHERE T3.COL1 = T2.COL1);
Copy
生成コード:
 --** SSC-FDM-TD0024 - SET TABLE FUNCTIONALITY NOT SUPPORTED. TABLE MIGHT HAVE DUPLICATE ROWS **
CREATE OR REPLACE TEMPORARY TABLE VOLATILETABLE
(
    COL1 INTEGER,
    COL2 INTEGER,
    COL3 INTEGER
)
--    --** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT PRESERVE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "TABLE2", "TABLE3" **
UPDATE TABLE2 AS T2
    SET
        --** SSC-FDM-0025 - UNEXPECTED END OF STATEMENT. PLEASE CHECK THE LINE 9 OF ORIGINAL SOURCE CODE. **
        T2.COL1 + VOLATILETABLE.COL1
    FROM
        VOLATILETABLE
        WHERE T2.COL2 = _VOLATILETABLE.COL2
            AND T2.COL3 = _VOLATILETABLE.COL3
            AND     T2.COL4 = (
                SELECT
                    MAX(T3.COL1)
                                                  FROM
                    TABLE3 T3
                                                  WHERE T3.COL1 = T2.COL1);
Copy

推奨

  • ソースコードが不完全でないか、変換されるステートメントが正しく終了しているかをチェックします。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0013

重大性

重大

説明

このエラーは、ソースコードから項目を変換する際に例外が発生した場合に表示されます。

推奨

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0014

重大性

重大

説明

このエラーは、特定のプロシージャステートメントの本文が生成されない場合に表示されます。

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0015

ピボット/アンピボットマルチプル機能はサポートされていません。

注釈

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

重大性

説明

このセクションでは、PIVOT およびUNPIVOT 句によって引き起こされる可能性のあるさまざまな問題について説明します。サポートされていないシナリオを以下の表に示します。

PIVOT

UNPIVOT

ORACLE

TERADATA

MULTIPLE COLUMN

X

X

X

X

RENAME COLUMN

X

X

X

X

MULTIPLE FUNCTION

X

X

X

WITH CLAUSE

X

X

XML OUTPUT FORMAT

X

X

IN CLAUSE SUBQUERY

X

X

X

IN CLAUSE ANY SEQUENCE

X

X

INCLUDE/EXCLUDE NULLS

X

X

X

MULTIPLE COLUMN

複数列は、PIVOT および UNPIVOT 句ではサポートされていません。

コード例
入力コード:
 SELECT * FROM star1p UNPIVOT ((sales,cogs)  FOR  yr_qtr
    IN ((Q101Sales, Q101Cogs) AS 'Q101A',
        (Q201Sales, Q201Cogs) AS 'Q201A', 
        (Q301Sales, Q301Cogs) AS 'Q301A')) AS Tmp;
Copy
生成されたコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT * FROM
    star1p
           !!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT MULTIPLE COLUMN NOT SUPPORTED ***/!!!
           UNPIVOT ((sales,cogs)  FOR  yr_qtr
    !!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT MULTIPLE COLUMN NOT SUPPORTED ***/!!!
    IN ((Q101Sales, Q101Cogs) AS 'Q101A',
        (Q201Sales, Q201Cogs) AS 'Q201A',
        (Q301Sales, Q301Cogs) AS 'Q301A')) AS Tmp;
Copy

RENAME COLUMN

エイリアスによる列名の変更は、snowflake UNPIVOT 句ではサポートされていません。Snow Convertは、有有効なクエリを作成し、この変更が元の機能に影響を与えないことを確認するために、関数または列のエイリアスを削除します。

PIVOT の場合、列エイリアスの使用は、次の2つの条件が満たされる場合にのみ、SnowConvert AI for Teradataでサポートされます。IN 句内のすべての式にエイリアスが関連付けられ、テーブル定義を提供するか、明示的な列リストを含むサブクエリを句への入力として使用することによって、結果として生成される列に関する情報が SnowConvert AI にあること。

コード例
入力コード:
CREATE TABLE star1(
	country VARCHAR(20),
	state VARCHAR(10), 
	yr INTEGER,
	qtr VARCHAR(3),
	sales INTEGER,
	cogs INTEGER
);

--SAMPLE 1
SELECT * FROM db1.star1p UNPIVOT (column1  FOR  for_column 
    IN (col1 AS 'as_col1', col2 AS 'as_col2')) Tmp;

--SAMPLE 2
SELECT *
FROM star1 PIVOT (
	SUM(sales) as ss1 FOR qtr                                                                                               
    IN ('Q1' AS Quarter1,                                                                                                     
    	'Q2' AS Quarter2, 
        'Q3' AS Quarter3)
)Tmp;

--SAMPLE 3
SELECT 
	* 
FROM (
	SELECT 
		country,
		state, 
		yr,
		qtr,
		sales,
		cogs
	FROM star1 ) A
PIVOT (
	SUM(sales) as ss1 FOR qtr                                                                                               
    IN ('Q1' AS Quarter1,                                                                                                     
    	'Q2' AS Quarter2, 
        'Q3' AS Quarter3)
)Tmp;
生成されたコード:
 CREATE OR REPLACE TABLE star1 (
	country VARCHAR(20),
	state VARCHAR(10),
	yr INTEGER,
	qtr VARCHAR(3),
	sales INTEGER,
	cogs INTEGER
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "08/14/2024" }}'
;

--SAMPLE 1
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "db1.star1p" **
SELECT
	* FROM db1.star1p UNPIVOT (column1  FOR  for_column
	    IN (col1 AS 'as_col1', col2 AS 'as_col2')) Tmp !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'PivotUnpivotTableReference' NODE ***/!!!;

--SAMPLE 2
SELECT
	*
FROM
	star1 PIVOT (
	SUM(sales) FOR qtr IN ('Q1',
	   	'Q2',
	       'Q3')) Tmp (
		country,
		state,
		yr,
		cogs,
		Quarter1_ss1,
		Quarter2_ss1,
		Quarter3_ss1
	);

--SAMPLE 3
	SELECT
		*
	FROM (
		SELECT
				country,
				state,
				yr,
				qtr,
				sales,
				cogs
			FROM
				star1
	) A
	PIVOT (
		SUM(sales) FOR qtr IN ('Q1',
	    'Q2',
	        'Q3')) Tmp (
		country,
		state,
		yr,
		cogs,
		Quarter1_ss1,
		Quarter2_ss1,
		Quarter3_ss1
	);
Copy

MULTIPLE FUNCTION

PIVOT 節では複数の関数はサポートされていません。caseステートメントを使用して書き直すことができる場合があります。詳しくは以下のTeradataサンプルを参照してください。[https://docs.teradata.com/r/756LNiPSFdY~4JcCCcR5Cw/L0kKSOrOeu_68mcW3o8ilw](https://docs.teradata.com/r/756LNiPSFdY~4JcCCcR5Cw/L0kKSOrOeu_68mcW3o8ilw)

コード例
入力コード:
 SELECT *
FROM STAR1 PIVOT(SUM(COL1), SUM(COL2) FOR YR IN ('Y1', 'Y2', 'Y3'))TMP;
Copy
生成されたコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
*
FROM
STAR1
      !!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT MULTIPLE FUNCTION NOT SUPPORTED ***/!!!
      PIVOT(SUM(COL1), SUM(COL2) FOR YR IN ('Y1', 'Y2', 'Y3'))TMP;
Copy

WITH CLAUSE

Teradata PIVOT にはオプションのWITH 句がありますが、これはSnowflakeの PIVOT では許可されていません。

コード例
入力コード:
 SELECT *
FROM STAR1 PIVOT(SUM(COL1) FOR YR IN ('Y1', 'Y2', 'Y3') WITH SUM(*) AS withalias)TMP;
Copy
生成されたコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
*
FROM
STAR1 PIVOT(SUM(COL1) FOR YR IN ('Y1', 'Y2', 'Y3')
                                                   !!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT WITH CLAUSE NOT SUPPORTED ***/!!!
 WITH SUM(*) AS withalias)TMP;
Copy

XML OUTPUT FORMAT

PIVOT 句の XML 出力は、Snowflakeではサポートされていません。

コード例
入力コード:
 SELECT * FROM   (SELECT product_code, quantity FROM pivot_test)
PIVOT XML (SUM(quantity) 
FOR (product_code) IN ('A','B','C'));
Copy
生成されたコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT * FROM
(
SELECT product_code, quantity FROM
pivot_test)
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT XML OUTPUT FORMAT NOT SUPPORTED ***/!!!
PIVOT (SUM(quantity) FOR product_code IN ( 'A', 'B', 'C'));
Copy

IN CLAUSE SUBQUERY

IN 句のサブクエリはサポートされていません。

コード例
入力コード:
 SELECT * FROM s1 PIVOT(SUM(COL1) FOR FORCOL IN (SELECT SELCOL FROM S2))DT;
Copy
生成されたコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT * FROM
s1 PIVOT (SUM(COL1) FOR FORCOL
                               !!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT IN CLAUSE SUBQUERY NOT SUPPORTED ***/!!! IN (SELECT SELCOL FROM
                               S2));
Copy

IN CLAUSE ANY SEQUENCE

このエラーは、IN 句で ANY キーワードが使用されている場合に発生します。これは現在サポートされていません。

コード例
入力コード:
 SELECT * FROM (SELECT product_code, quantity FROM pivot_test)
PIVOT (SUM(quantity)
FOR product_code IN (ANY, ANY, ANY));
Copy
生成されたコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT * FROM (SELECT product_code, quantity FROM
pivot_test)
PIVOT (SUM(quantity)
FOR product_code
                 !!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT IN CLAUSE ANY SEQUENCE NOT SUPPORTED ***/!!!
 IN (ANY, ANY, ANY));
Copy

INCLUDE/EXCLUDE NULLS

INCLUDE NULLS やEXCLUDE NULLS は、SnowflakeのUNPIVOT 句では有効なオプションではありません。

コード例
入力コード:
 SELECT * FROM db1.star1p UNPIVOT INCLUDE NULLS (column1  FOR  for_column IN (col1, col2)) Tmp;
Copy
生成されたコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT * FROM
db1.star1p
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT INCLUDE NULLS NOT SUPPORTED ***/!!!
UNPIVOT ( column1 FOR for_column IN (
col1,
col2)) Tmp;
Copy

ベストプラクティス

  • 可能であればクエリを書き直してください。それ以外の場合は、追加のユーザーアクションは必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0016

Snowflakeはオプション句をサポートしていません。

重大度

説明

この EWI は、OPTIONS にSnowflakeがサポートしていないオプションがある場合に、DDLs ステートメントに追加されます。

コード例

入力コード:

BigQuery
 CREATE VIEW my_view
OPTIONS (
  expiration_timestamp=TIMESTAMP "2026-01-01 00:00:00 UTC",
  privacy_policy='{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_columns": "ID"}}'
) AS
SELECT column1, column2
FROM my_table;
Copy

出力コード:

Snowflake
 CREATE VIEW my_view
!!!RESOLVE EWI!!! /*** SSC-EWI-0016 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: EXPIRATION_TIMESTAMP, PRIVACY_POLICY. ***/!!!
OPTIONS(
  expiration_timestamp=TIMESTAMP "2026-01-01 00:00:00 UTC",
  privacy_policy='{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_columns": "ID"}}'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "bigquery",  "convertedOn": "07/10/2025",  "domain": "no-domain-provided" }}'
AS
SELECT column1, column2
FROM
  my_table;
Copy

SSC-EWI-0020

CUSTOM UDF INSERTED。

重大性

概要

Snowflakeではサポートされていないソース言語の動作を再現するために使用される、SnowConvert AIによって提供されるユーザー定義関数(UDF)がいくつかあり、その機能と説明については以下に詳細に記載されています。

UDFs は、移行後に出力パスに作成される「UDF Helpers」フォルダーにあります。

ベストプラクティス

  • UDF Helpersフォルダーが作成され、その中にファイルが含まれているかどうかを確認します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0021

サポート対象外です。

重大性

説明

このメッセージは、ソースコードの特定のノードまたはステートメントがSnowflakeサポートされていない場合に表示されます。

コード例

入力コード:
 WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 )))) 
SELECT aValue from my_av;
Copy
生成されたコード:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - SubavFactoring NOT SUPPORTED IN SNOWFLAKE ***/!!!
WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
SELECT aValue from my_av;
Copy

ベストプラクティス

  • このエラーが発生するのは、変換されるノードに相当するSnowflakeが存在しないためです。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0022

特定のステートメント内の1つ以上の識別子は、デフォルトでパラメーターとみなされます。

警告

EWI は、Javascriptがストアドプロシージャのターゲット言語である場合にのみ生成されます。ストアドプロシージャの推奨ターゲット言語はSnowflakeスクリプトであるため、これは非推奨の変換機能です。

注釈

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

重大性

説明

このエラーは、特定のステートメント内の1つ以上の識別子がデフォルトでパラメーターとみなされていることを報告するために使用されます。

コード例

入力コード:
 -- Additional Params: -t javascript
CREATE MACRO SAME_MACRO_COLUMN_AND_PARAMATERS (
LOAD_USER_ID (VARCHAR (32), CHARACTER SET LATIN),
UPDATE_USER_ID (VARCHAR (32), CHARACTER SET LATIN)
) AS (
UPDATE TABLE1 SET LOAD_USER_ID = :LOAD_USER_ID, UPDATE_USER_ID = :UPDATE_USER_ID;
INSERT INTO TABLE1 (LOAD_USER_ID, UPDATE_USER_ID) VALUES (:LOAD_USER_ID, :UPDATE_USER_ID);
DELETE FROM TABLE1 WHERE :LOAD_USER_ID = LOAD_USER_ID;
);
Copy
生成されたコード:
-- Additional Params: -t javascript
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE PROCEDURE SAME_MACRO_COLUMN_AND_PARAMATERS (LOAD_USER_ID VARCHAR (32), UPDATE_USER_ID VARCHAR (32))
RETURNS STRING
LANGUAGE JAVASCRIPT
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
$$
// REGION SnowConvert AI Helpers Code
var HANDLE_NOTFOUND;
var _RS, ROW_COUNT, _ROWS, MESSAGE_TEXT, SQLCODE = 0, SQLSTATE = '00000', ERROR_HANDLERS, ACTIVITY_COUNT = 0, INTO, _OUTQUERIES = [], DYNAMIC_RESULTS = -1;
var formatDate = (arg) => (new Date(arg - (arg.getTimezoneOffset() * 60000))).toISOString().slice(0,-1);
var fixBind = function (arg) {
arg = arg == undefined ? null : arg instanceof Date ? formatDate(arg) : arg;
return arg;
};
var EXEC = function (stmt,binds,noCatch,catchFunction,opts) {
try {
binds = binds ? binds.map(fixBind) : binds;
_RS = snowflake.createStatement({
sqlText : stmt,
binds : binds
});
_ROWS = _RS.execute();
ROW_COUNT = _RS.getRowCount();
ACTIVITY_COUNT = _RS.getNumRowsAffected();
HANDLE_NOTFOUND && HANDLE_NOTFOUND(_RS);
if (INTO) return {
INTO : function () {
return INTO();
}
};
if (_OUTQUERIES.length < DYNAMIC_RESULTS) _OUTQUERIES.push(_ROWS.getQueryId());
if (opts && opts.temp) return _ROWS.getQueryId();
} catch(error) {
MESSAGE_TEXT = error.message;
SQLCODE = error.code;
SQLSTATE = error.state;
var msg = `ERROR CODE: ${SQLCODE} SQLSTATE: ${SQLSTATE} MESSAGE: ${MESSAGE_TEXT}`;
if (catchFunction) catchFunction(error);
if (!noCatch && ERROR_HANDLERS) ERROR_HANDLERS(error); else throw new Error(msg);
}
};
// END REGION

EXEC(`UPDATE TABLE1
   SET
      LOAD_USER_ID = :1,
      UPDATE_USER_ID = :2`,[LOAD_USER_ID,UPDATE_USER_ID]);
// ** SSC-EWI-0022 - ONE OR MORE IDENTIFIERS IN THIS STATEMENT WERE CONSIDERED PARAMETERS BY DEFAULT. REFERENCED TABLE NOT FOUND. **
EXEC(`INSERT INTO TABLE1 (LOAD_USER_ID, UPDATE_USER_ID)
VALUES (:1, :2)`,[LOAD_USER_ID,UPDATE_USER_ID]);
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'Delete' NODE ***/!!!
//DELETE FROM
//   TABLE1
//WHERE
//   UPPER(RTRIM(:LOAD_USER_ID)) = UPPER(RTRIM(LOAD_USER_ID))
null
$$;
Copy

ベストプラクティス

  • プロシージャステートメントに関連するすべての依存関係(テーブルとビュー)が移行されていることを確認してください。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0023

パフォーマンスレビュー:ループには、挿入、削除、更新ステートメントが含まれます。

警告

EWI は、Javascriptがストアドプロシージャのターゲット言語である場合にのみ生成されます。ストアドプロシージャの推奨ターゲット言語はSnowflakeスクリプトであるため、これは非推奨の変換機能です。

注釈

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

重大性

説明

この警告は、パフォーマンスに関してユーザーが考慮すべき可能性を示しています。

コード例

入力コード:
 -- Additional Params: -t javascript
REPLACE PROCEDURE Database1.Proc1()
BEGIN
    DECLARE lNumber INTEGER DEFAULT 1;
    FOR class1 AS class2 CURSOR FOR 
      SELECT COL0,
      TRIM(COL1) AS COL1ALIAS,
      TRIM(COL2),
      COL3
      FROM someDb.prefixCol
    DO
      INSERT INTO TempDB.Table1 (:lgNumber, :lNumber, (',' || :class1.ClassCD || '_Ind CHAR(1) NOT NULL'));
      SET lNumber = lNumber + 1;
    END FOR;
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE Database1.Proc1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
    // SnowConvert AI Helpers Code section is omitted.

    var LNUMBER = 1;
    /*** SSC-EWI-0023 - PERFORMANCE REVIEW - THIS LOOP CONTAINS AN INSERT, DELETE OR UPDATE STATEMENT ***/
    for(var CLASS2 = new CURSOR(`SELECT
   COL0,
   TRIM(COL1) AS COL1ALIAS,
   TRIM(COL2),
   COL3
FROM
   someDb.prefixCol`,[],false).OPEN();CLASS2.NEXT();) {
        let CLASS1 = CLASS2.CURRENT;
        EXEC(`INSERT INTO TempDB.Table1
VALUES (:lgNumber, :1, (',' || :
!!!RESOLVE EWI!!! /*** SSC-EWI-0026 - THE  VARIABLE class1.ClassCD MAY REQUIRE A CAST TO DATE, TIME OR TIMESTAMP ***/!!!
:2 || '_Ind CHAR(1) NOT NULL'))`,[LNUMBER,CLASS1.CLASSCD]);
        LNUMBER = LNUMBER + 1;
    }
    CLASS2.CLOSE();
$$;
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0025

時間変数をバインドするには、クエリの変更が必要になる場合があります。

警告

EWI は、Javascriptがストアドプロシージャのターゲット言語である場合にのみ生成されます。ストアドプロシージャの推奨ターゲット言語はSnowflakeスクリプトであるため、これは非推奨の変換機能です。

注釈

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

重大性

説明

時間変数をバインドするアクションは、その変数を含むクエリの変更が必要になる場合があります。

コード例

入力コード:
 -- Additional Params: -t javascript
CREATE PROCEDURE P_1025()
BEGIN
  DECLARE LN_EMP_KEY_NO_PARAM NUMERIC DEFAULT -1;
  DECLARE FLOATVARNAME FLOAT DEFAULT 12.1;
  DECLARE hErrorMsg CHARACTER(30) DEFAULT 'NO ERROR';
  DECLARE CurrTs TIME DEFAULT CURRENT_TIME;
  DECLARE CurrTs2 TIME DEFAULT CURRENT_TIMESTAMP;
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE P_1025 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
  // SnowConvert AI Helpers Code section is omitted.

  var LN_EMP_KEY_NO_PARAM = -1;
  var FLOATVARNAME = 12.1;
  var HERRORMSG = `NO ERROR`;
  var CURRTS = new Date() /*** SSC-EWI-0025 - BINDING TIME VARIABLE MIGHT REQUIRE CHANGE IN QUERY. ***/;
  var CURRTS2 = new Date();
$$;
Copy

ベストプラクティス

  • ユーザーによる追加のアクションは必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0026

修飾された変数はキャストを必要とする場合があります。

警告

EWI は、Javascriptがストアドプロシージャのターゲット言語である場合にのみ生成されます。ストアドプロシージャの推奨ターゲット言語はSnowflakeスクリプトであるため、これは非推奨の変換機能です。

注釈

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

重大性

説明

この警告は、OracleレコードやTeradata for loop変数などの修飾メンバーを持つ変数を含むクエリがある場合に追加されます。変数が使用される場所や値の型によっては、正しく動作させるためにキャストが必要な場合があります。

コード例

入力コード:
 CREATE TABLE TABLE1 (COL1 DATE);
CREATE TABLE TABLE2 (COL1 VARCHAR(25));

CREATE OR REPLACE PROCEDURE EXAMPLE
IS
    CURSOR C1 IS SELECT * FROM TABLE1;
BEGIN
    FOR REC1 IN C1 LOOP
		    insert into TABLE2 values (TO_CHAR(REC1.COL1, 'DD-MM-YYYY'));
    END LOOP;
END;
Copy
生成されたコード:
 -- Additional Params: -t javascript
CREATE OR REPLACE TABLE TABLE1 (COL1 TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE TABLE TABLE2 (COL1 VARCHAR(25))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE PROCEDURE EXAMPLE ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	// SnowConvert AI Helpers Code section is omitted.

	let C1 = new CURSOR(`SELECT * FROM
      TABLE1`,() => []);
	C1.OPEN();
	// ** SSC-EWI-0023 - PERFORMANCE REVIEW - THIS LOOP CONTAINS AN INSERT, DELETE OR UPDATE STATEMENT **
	while ( C1.NEXT() ) {
		let REC1 = C1.CURRENT;
		EXEC(`insert into TABLE2
		    values (TO_CHAR(
		    !!!RESOLVE EWI!!! /*** SSC-EWI-0026 - THE  VARIABLE REC1.COL1 MAY REQUIRE A CAST TO DATE, TIME OR TIMESTAMP ***/!!!
		    ?, 'DD-MM-YYYY'))`,[REC1.COL1]);
	}
	C1.CLOSE();
$$;
Copy
調整後の生成コード:
 CREATE OR REPLACE TABLE TABLE1 (COL1 TIMESTAMP
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE TABLE TABLE2 (COL1 VARCHAR(25))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE PROCEDURE EXAMPLE ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	// SnowConvert AI Helpers Code section is omitted.

	let C1 = new CURSOR(`SELECT * FROM
      TABLE1`,() => []);
	C1.OPEN();
	// ** SSC-EWI-0023 - PERFORMANCE REVIEW - THIS LOOP CONTAINS AN INSERT, DELETE OR UPDATE STATEMENT **
	while ( C1.NEXT() ) {
		let REC1 = C1.CURRENT;
		EXEC(`insert into TABLE2
		    values (TO_CHAR(REC1.COL1::DATE, 'DD-MM-YYYY'))`,[REC1.COL1]);
	}
	C1.CLOSE();
$$;
Copy

ベストプラクティス

  • バインディングに日付、時刻、またはタイムスタンプへのキャストが必要かどうかを確認します。値に対して暗黙的な変換が行われるため、必要ないケースもあります。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0027

次のステートメントでは、無効なクエリで変数/リテラルを使用しているため、実行されません。

注釈

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

重大性

説明

この警告は、特定のステートメントが無効なクエリで変数またはリテラルを使用しており、そのために実行されないことを報告するために使用されます。

コード例

入力コード:
 REPLACE PROCEDURE TEST.COLLECT_STATS () 
BEGIN
  COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME);

  SET STATS_STATEMENT = 'COLLECT STATS ON ' || OUT_DB || '.' || OUT_TBL || ' COLUMN(' || C4.ColumnName || ');';

  EXECUTE IMMEDIATE STATS_STATEMENT;

  EXECUTE IMMEDIATE 'COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME);';

  SET STATS_STATEMENT_NOT_DYNAMIC = 'COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME);';

  EXECUTE IMMEDIATE STATS_STATEMENT_NOT_DYNAMIC;

END;
;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE TEST.COLLECT_STATS ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
  BEGIN
--    --** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. COLLECT **
--    COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME);
    STATS_STATEMENT := 'COLLECT STATS ON ' || OUT_DB || '.' || OUT_TBL || ' COLUMN(' || C4.ColumnName || ')';
    !!!RESOLVE EWI!!! /*** SSC-EWI-0027 - THE FOLLOWING STATEMENT USES A VARIABLE/LITERAL WITH AN INVALID QUERY AND IT WILL NOT BE EXECUTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!

    EXECUTE IMMEDIATE STATS_STATEMENT;
    !!!RESOLVE EWI!!! /*** SSC-EWI-0027 - THE FOLLOWING STATEMENT USES A VARIABLE/LITERAL WITH AN INVALID QUERY AND IT WILL NOT BE EXECUTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!

    EXECUTE IMMEDIATE 'COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME)';
    STATS_STATEMENT_NOT_DYNAMIC := 'COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME)';
    !!!RESOLVE EWI!!! /*** SSC-EWI-0027 - THE FOLLOWING STATEMENT USES A VARIABLE/LITERAL WITH AN INVALID QUERY AND IT WILL NOT BE EXECUTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!

    EXECUTE IMMEDIATE STATS_STATEMENT_NOT_DYNAMIC;
  END;
$$;
Copy

ベストプラクティス

  • バインディングに日付、時刻、またはタイムスタンプへのキャストが必要かどうかを確認します。値に対して暗黙的な変換が行われるため、必要ないケースもあります。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0028

Snowflakeがサポートしていない型

重大性

説明

このメッセージは、型がSnowflakeでサポートされていない場合に表示されます。

入力コード(Oracle):
 CREATE TABLE MYTABLE
(
    COL1 SYS.ANYDATASET
);
Copy
生成されたコード:
 CREATE OR REPLACE TABLE MYTABLE
    (
    !!!RESOLVE EWI!!! /*** SSC-EWI-0028 - TYPE NOT SUPPORTED BY SNOWFLAKE ***/!!!
        COL1 SYS.ANYDATASET
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0029

snowflakeでサポートされていない外部テーブルデータ形式

重大性

説明

Snowflakeは以下の外部テーブル形式をサポートしています。

BigQuery

Snowflake

AVRO

AVRO

CSV
GOOGLE_SHEETS

CSV

NEWLINE_DELIMITED_JSON
JSON

JSON

ORC

ORC

PARQUET

PARQUET

外部テーブルが上記の表で指定されていない他のFORMAT を持つ場合、このEWI が生成され、FORMAT がサポートされていないことをユーザーに通知します。

コード例

入力コード:
BigQuery
 CREATE OR REPLACE EXTERNAL TABLE test.backup_restore_table
OPTIONS (
  format = 'DATASTORE_BACKUP',
  uris = ['gs://backup_bucket/backup_folder/*']
);
Copy
生成されたコード:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-0029 - EXTERNAL TABLE DATA FORMAT NOT SUPPORTED IN SNOWFLAKE ***/!!!
CREATE OR REPLACE EXTERNAL TABLE test.backup_restore_table USING TEMPLATE (
SELECT
  ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
  --** SSC-FDM-0035 - THE INFER_SCHEMA FUNCTION REQUIRES A FILE PATH WITHOUT WILDCARDS TO GENERATE THE TABLE TEMPLATE, REPLACE THE FILE_PATH PLACEHOLDER WITH IT **
  TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/FILE_PATH', FILE_FORMAT => 'SC_TEST_BACKUP_RESTORE_TABLE_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://backup_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'backup_folder/.*'
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "bigquery",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}';
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0030

以下のステートメントには、動的 SQL を使用しています

注釈

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

重大性

説明

このエラーは、ステートメントが動的 SQL を使用していることを示すために使用されます。特定のソース言語にはそれぞれ、動的 SQL を実行できるステートメントのセットがあります。動的 SQL とは、データベースエンジン言語が提供する文字列操作ツールを使ってテキストとして構築されるコードを指します。

このシナリオは、動的 SQL が実行時に構築および実行されるため、エラーの追跡やデバッグが難しくなり、複雑なパターンであると考えられます。このエラーは、Snow Convertのような静的コード解析ツールでは発見できない問題を発見するための補助的なものです。

コード例

Teradata

入力
 REPLACE PROCEDURE teradata_dynamic_sql()
BEGIN
  DECLARE str_sql VARCHAR(20);
  SET str_sql = 'UPDATE TABLE
                    SET COLA = 0,
                        COLB = ''test''';

  EXECUTE IMMEDIATE str_sql;
  EXECUTE IMMEDIATE 'INSERT INTO TABLE1(COL1) VALUES(1)';
  EXECUTE str_sql;
  CALL DBC.SysExecSQL('INSERT INTO TABLE1(COL1) VALUES(1)');
END;
Copy
出力
 CREATE OR REPLACE PROCEDURE teradata_dynamic_sql ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/04/2024" }}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    str_sql VARCHAR(20);
  BEGIN
     
    str_sql := 'UPDATE "TABLE"
   SET COLA = 0,
       COLB = ''test''';
    !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE str_sql;
    !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE 'INSERT INTO TABLE1 (COL1)
VALUES (1);';
    !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE str_sql;
    !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE 'INSERT INTO TABLE1 (COL1)
VALUES (1);';
  END;
$$;
Copy

Oracle

入力
 CREATE OR REPLACE PROCEDURE oracle_dynamic_sql
AS
    dynamic_statement VARCHAR(100);
    numeric_variable INTEGER;
    dynamic_statement VARCHAR(100);
    column_variable VARCHAR(100);
    cursor_variable SYS_REFCURSOR;
    c INTEGER;
    dynamic_statement VARCHAR(100);
BEGIN
    dynamic_statement := 'INSERT INTO sample_table(col1) VALUES(1)';
    numeric_variable := 3;
    column_variable := 'col1';

    EXECUTE IMMEDIATE dynamic_statement;
    EXECUTE IMMEDIATE 'INSERT INTO sample_table(col1) VALUES(' || numeric_variable || ')';

    OPEN cursor_variable FOR dynamic_statement;
    OPEN cursor_variable FOR 'SELECT ' || column_variable || ' FROM sample_table';
    OPEN cursor_variable FOR 'SELECT col1 FROM sample_table';

    
    c := DBMS_SQL.OPEN_CURSOR;
    dynamic_statement := 'SELECT * FROM sample_table';
    DBMS_SQL.PARSE(c, dynamic_statement);
END;
Copy
出力
 CREATE OR REPLACE PROCEDURE oracle_dynamic_sql ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        dynamic_statement VARCHAR(100);
        numeric_variable INTEGER;
        dynamic_statement VARCHAR(100);
        column_variable VARCHAR(100);
        cursor_variable_res RESULTSET;
        c INTEGER;
        dynamic_statement VARCHAR(100);
    BEGIN
        dynamic_statement := 'INSERT INTO sample_table(col1) VALUES(1)';
        numeric_variable := 3;
        column_variable := 'col1';
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
        EXECUTE IMMEDIATE :dynamic_statement;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE 'INSERT INTO sample_table(col1) VALUES(' || NVL(:numeric_variable :: STRING, '') || ')';
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
        cursor_variable_res := (
            EXECUTE IMMEDIATE :dynamic_statement
        );
        LET cursor_variable CURSOR
        FOR
            cursor_variable_res;
        OPEN cursor_variable;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
        cursor_variable_res := (
            EXECUTE IMMEDIATE 'SELECT ' || NVL(:column_variable :: STRING, '') || ' FROM
   sample_table'
        );
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0133 - THE CURSOR VARIABLE NAMED 'cursor_variable' HAS ALREADY BEEN ASSIGNED IN ANOTHER CURSOR ***/!!!
        LET cursor_variable CURSOR
        FOR
            cursor_variable_res;
        OPEN cursor_variable;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
        cursor_variable_res := (
            EXECUTE IMMEDIATE 'SELECT col1 FROM
   sample_table'
        );
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0133 - THE CURSOR VARIABLE NAMED 'cursor_variable' HAS ALREADY BEEN ASSIGNED IN ANOTHER CURSOR ***/!!!
        LET cursor_variable CURSOR
        FOR
            cursor_variable_res;
        OPEN cursor_variable;
        c :=
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_SQL.OPEN_CURSOR' IS NOT CURRENTLY SUPPORTED. ***/!!!
        '' AS OPEN_CURSOR;
        dynamic_statement := 'SELECT * FROM
   sample_table';
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_SQL.PARSE' IS NOT CURRENTLY SUPPORTED. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    DBMS_SQL.PARSE(:c, :dynamic_statement);
    END;
$$;
Copy

SQL Server

入力
 CREATE OR ALTER PROCEDURE transact_dynamic_sql
AS
BEGIN
    DECLARE @dynamicStatement AS VARCHAR(200);
    DECLARE @numericVariable AS VARCHAR(200);

    SET @dynamicStatement = 'INSERT INTO sample_table(col1) VALUES(1);';
    SET @numericVariable = '3';

    EXECUTE (@dynamicStatement);
    EXEC ('INSERT INTO sampleTable(col1) VALUES (' + @numericVariable + ');');
    EXECUTE ('INSERT INTO sampleTable(col1) VALUES(10);') AS USER = 'DbAdmin';
    
    INSERT INTO sampleTable EXECUTE sp_executesql @statement = 'SELECT * FROM sampleTable;';
    INSERT INTO sampleTable EXECUTE ('SELECT * FROM sampleTable;');
END;
Copy
出力
 CREATE OR REPLACE PROCEDURE transact_dynamic_sql ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "11/13/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        DYNAMICSTATEMENT VARCHAR(200);
        NUMERICVARIABLE VARCHAR(200);
    BEGIN
         
         
        DYNAMICSTATEMENT := 'INSERT INTO sample_table (col1) VALUES(1);';
        NUMERICVARIABLE := '3';
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
        EXECUTE IMMEDIATE :DYNAMICSTATEMENT;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
        EXECUTE IMMEDIATE 'INSERT INTO sampleTable (col1) VALUES (' || :NUMERICVARIABLE || ');';
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - EXECUTE AS USER/LOGIN NOT SUPPORTED IN SNOWFLAKE ***/!!!
        EXECUTE IMMEDIATE 'INSERT INTO sampleTable (col1) VALUES(10);';
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'INSERT WITH EXECUTE' NODE ***/!!!
        INSERT INTO sampleTable EXECUTE IMMEDIATE 'SELECT
   *
FROM
   sampleTable;';
        !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'INSERT WITH EXECUTE' NODE ***/!!!
    INSERT INTO sampleTable EXECUTE IMMEDIATE 'SELECT
   *
FROM
   sampleTable;';
    END;
$$;
Copy

動的 SQL の内部の問題

考慮すべき重要な点は、動的 SQL のコードを移行する際、SnowConvert AI は、出力コードや評価レポートにおいて、動的 SQL 内部のいかなるタイプの問題も報告しないということです。問題のドキュメントや変換仕様書に、問題が常に出力コードに追加されることが記載されている場合でも、この問題は発生します。この状況が発生する可能性があるOracleでの移行の例を次に示します。

Oracle
 SELECT dbms_random.value() FROM dual;

CREATE OR REPLACE PROCEDURE dynamic_sql_procedure
AS
  result VARCHAR(100) := 'SELECT dbms_random.value() from dual';
BEGIN
  NULL;  
END;
Copy
Snowflake
 SELECT
  --** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
  DBMS_RANDOM.VALUE_UDF() FROM dual;

CREATE OR REPLACE PROCEDURE dynamic_sql_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    result VARCHAR(100) := 'SELECT
   DBMS_RANDOM.VALUE_UDF() from dual';
  BEGIN
    NULL;
  END;
$$;
Copy

先ほどの例では、クエリとプロシージャ内の変数代入はまったく同じように変換されます。違いは、動的 SQL コードでは、変換の問題が出力コードと評価レポートに表示されないことです。

ベストプラクティス

  • このタグを使用して、動的にビルドされたステートメントをすべて追跡し、トラブルシューティング時にその正確性を確認します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0031

機能がサポートされていません。

注釈

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

重大度

説明

この警告は、Teradata、Oracle、SQL Server の特定の 組み込み関数 がサポートされていないことを報告するために使用されます。

コード例

入力コード(オラクル):
 SELECT VALUE(ST) FROM SampleTable ST;
Copy
出力コード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0031 - VALUE FUNCTION NOT SUPPORTED ***/!!!
 VALUE(ST) FROM
 SampleTable ST;
Copy

ベストプラクティス

  • 変換しようとしている特定の関数の現在の変換を確認するには、以下のリンクを参照してください。

    • [Oracle組み込み関数](../../../../translation-references/oracle/functions/README.md)

    • [Teradata組み込み関数](../../../../translation-references/teradata/sql-translation-reference/teradata-built-in-functions.md)

    • [SQL サーバー組み込み関数](../../../../translation-references/transact/transact-built-in-functions.md)

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0032

外部テーブルは、外部の場所にアクセスし、EXTERNAL_STAGE プレースホルダーを定義して置き換えるための外部ステージが必要です

説明

CREATE EXTERNAL TABLE ステートメントを変換すると、SnowConvert AI は EXTERNAL _STAGE プレースホルダーを生成します。これは、Snowflakeから外部の場所に接続するために作成された外部ステージに置き換える必要があります。

以下のガイドを参照して、Snowflakeアカウントで必要なストレージ統合と外部ステージを設定してください。

  • [Amazon S3を参照する外部テーブルの場合](https://docs.snowflake.com/ja/user-guide/tables-external-s3)

  • [Google Cloud Storageを参照する外部テーブルの場合](https://docs.snowflake.com/ja/user-guide/tables-external-gcs)

  • [Azure Blob Storageを参照する外部テーブルの場合](https://docs.snowflake.com/ja/user-guide/tables-external-azure)

コード例

入力コード:
BigQuery
 CREATE OR REPLACE EXTERNAL TABLE test.Employees_test
(
  Employee_id INTEGER,
  Name STRING,
  Mail STRING,
  Position STRING,
  Salary INTEGER
)
OPTIONS(
  FORMAT='CSV',
  SKIP_LEADING_ROWS=1,
  URIS=['gs://sc_external_table_bucket/folder_with_csv/Employees.csv']
);
Copy
生成されたコード:
Snowflake
CREATE OR REPLACE EXTERNAL TABLE test.Employees_test
(
  Employee_id INTEGER AS CAST(GET_IGNORE_CASE($1, 'c1') AS INTEGER),
  Name STRING AS CAST(GET_IGNORE_CASE($1, 'c2') AS STRING),
  Mail STRING AS CAST(GET_IGNORE_CASE($1, 'c3') AS STRING),
  Position STRING AS CAST(GET_IGNORE_CASE($1, 'c4') AS STRING),
  Salary INTEGER AS CAST(GET_IGNORE_CASE($1, 'c5') AS INTEGER)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_csv/Employees.csv'
FILE_FORMAT = (TYPE = CSV SKIP_HEADER =1);

ベストプラクティス

  • Snowflakeアカウントで外部接続を設定し、EXTERNAL_STAGE プレースホルダーを置き換えて変換を完了します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0033

形式が削除され、セマンティック情報が見つかりません。

注釈

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

重大性

説明

この警告は、特定の出力形式を持つ CAST 関数で使用されている列がソースコード内に見つからなかった場合に表示されます。

コード例

入力コード(Teradata):
 CREATE VIEW SampleView AS
SELECT
    DAY_DATE(FORMAT 'MMM-YYYY')(CHAR(8))
FROM
    SampleTable;
Copy
生成コード:
 // SnowConvert AI Helpers Code section is omitted.
CREATE OR REPLACE VIEW SampleView
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
    CAST(RPAD(TO_VARCHAR(
    DAY_DATE !!!RESOLVE EWI!!! /*** SSC-EWI-0033 - FORMAT 'MMM-YYYY' REMOVED, SEMANTIC INFORMATION NOT FOUND. ***/!!!), 8) AS CHAR(8))
    FROM
    SampleTable;
Copy

ベストプラクティス

  • プロシージャステートメントに関連するすべての依存関係(テーブルとビュー)が移行されていることを確認してください。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0034

形式は削除されました。

注釈

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

重大性

説明

この警告は、CAST 関数で使用されている列の形式が削除された場合に表示されます。

コード例

入力コード(Teradata):
 CREATE VIEW SampleView AS
SELECT
    DAY_DATE(FORMAT 'MMM-YYYY') + 1
FROM
    SampleTable;
Copy
生成コード:
 // SnowConvert AI Helpers Code section is omitted.
CREATE OR REPLACE VIEW SampleView
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
    DAY_DATE !!!RESOLVE EWI!!! /*** SSC-EWI-0034 - FORMAT 'MMM-YYYY' REMOVED. ***/!!! + 1
FROM
    SampleTable;
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0035

チェックステートメントはサポートされていません。

注釈

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

重大性

説明

CHECK 制約はSnowflakeではサポートされていませんが、機能的には影響ありません。

コード例

入力コードOracle:
 CREATE TABLE "Schema"."BaseTable"(
  "COLUMN1" VARCHAR2(255),
  CHECK ( COLUMN1 IS NOT NULL )
);
Copy
生成コード:
 CREATE OR REPLACE TABLE "Schema"."BaseTable" (
    "COLUMN1" VARCHAR(255),
    !!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
    CHECK ( COLUMN1 IS NOT NULL )
  )
  COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
  ;
Copy
入力コードTeradata:
 CREATE TABLE TABLE1,
    NO FALLBACK,
    NO BEFORE JOURNAL,
    NO AFTER JOURNAL
(
    COL0 BYTEINT,
    CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
Copy
生成コード:
 CREATE OR REPLACE TABLE TABLE1
(
    COL0 BYTEINT,
    !!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
    CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy
入力コード SqlServer
 ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name 
CHECK NOT FOR REPLICATION (column_name > 1);
Copy
生成されたコード:
 ALTER TABLE IF EXISTS table_name2
ADD column_name VARCHAR(255)
!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0036

データ型が別のデータ型に変換されました。

重大性

説明

この警告は、あるデータ型が別のデータ型に変更されたときに表示されます。

コード例

ソースコード:
 CREATE TABLE SampleTable (
    SampleYear INTERVAL YEAR(2),
    SampleMonth INTERVAL MONTH(2)
);
Copy
変換コード:
 CREATE OR REPLACE TABLE SampleTable (
    SampleYear VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR(2) DATA TYPE CONVERTED TO VARCHAR ***/!!!,
    SampleMonth VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MONTH(2) DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/23/2024" }}'
;
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0040

句はサポートされていません。

注釈

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

重大性

説明

この警告は、SnowFlake でサポートされていないステートメントがあるときに追加されます。

コード例

以下の例では、SELECT クエリで SQL サーバーのPERCENT 句が使用されていますが、これはSnowflakeではサポートされていません。

入力コード(SQL サーバー):
 SELECT TOP 1 PERCENT * FROM SampleTable;
Copy
ソースコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
TOP 1 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'TOP PERCENT' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
	*
FROM
	SampleTable;
Copy

ベストプラクティス

  • ステートメントの本来の機能を確認し、Snowflakeの特定のニーズに実際に必要かどうかを確認してください。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0041

ファイルに予期しないエンコードが使用されており、変換されませんでした

注釈

この EWI は非推奨です。[SSC-OOS-0001](../out-of-scope/generalOOS.md#ssc-oos-0001)ドキュメントを参照してください。

説明

この問題は、ソースコードファイルのエンコード形式がツールで認識できない場合に発生します。文字エンコーディングは、グラフィカル文字(この文脈では人間の言語で書かれた文字)に数字を割り当てるプロセスであるため、このエラーは変換ツールが特定の文字を認識できなかったことを示しています。

ベストプラクティス

  • このエラーを避けるには、入力フォルダー内のすべてのファイルのエンコードを同じにする必要があります。

  • 適切なエンコードは、変換設定で選択するか、[CLI](./../../user-guide/snowconvert/how-to-use-the-snowconvert-cli)の--encoding変換パラメーターを使用して選択する必要があります。選択するエンコーディングを決定するには、[Free Online Formater](https://freeonlineformatter.com/encoding-string)などのオンラインツールを使用するか、LinuxまたはOS の場合は file -i * のコマンドを実行します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0045

列名はSnowflake予約キーワードです。

重大性

説明

場合によっては、ソース言語で有効な列名がSnowflakeの予約キーワードと競合することがあります。このような競合は、Snowflakeが特別な処理をしなければ列名として直接使用できないキーワードのセットを予約しているために発生します。詳細については、Snowflakeの公式ドキュメント[予約および制限されたキーワード](https://docs.snowflake.com/ja/sql-reference/reserved-keywords)を参照してください。

コード例

入力
 CREATE TABLE T1
(
    LOCALTIME VARCHAR,
    CURRENT_USER VARCHAR
);
Copy
出力
 CREATE OR REPLACE TABLE T1
    (
    !!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'LOCALTIME' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
    "LOCALTIME" VARCHAR,
    !!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CURRENT_USER' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
    "CURRENT_USER" VARCHAR
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;
Copy

ベストプラクティス

  • Snowflakeでサポートされていない名前を使用している列名の変更を検討してください。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0046

ネストされた関数/プロシージャの宣言は複雑なパターンとみなされ、snowflakeではサポートされていません。

重大性

Critical

説明

Snowflakeはネストされた関数/プロシージャの宣言をサポートしていないため、ネストされた宣言が見つかったcreate functionまたはcreate procedureステートメントにこの警告が追加されます。

コード例

入力
 CREATE OR REPLACE FUNCTION myFunction
RETURN INTEGER
IS
   total_count INTEGER;
   -- Function Declaration
   FUNCTION function_declaration(param1 VARCHAR) RETURN INTEGER;
   FUNCTION function_definition
   RETURN INTEGER
   IS
   count INTEGER;
   PROCEDURE procedure_declaration(param1 INTEGER)
   IS
       BEGIN
            NULL;
       END;
  BEGIN
    RETURN count;
  end;
BEGIN
    -- Your logic to calculate the total employee count goes here
    RETURN total_count;
END;
Copy
出力
 !!!RESOLVE EWI!!! /*** SSC-EWI-0046 - NESTED FUNCTION/PROCEDURE DECLARATIONS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE FUNCTION myFunction ()
RETURNS FLOAT
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
AS
$$
  let TOTAL_COUNT;
  !!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED FUNCTION IS NOT SUPPORTED IN THIS SCENARIO ***/!!!
  /*    -- Function Declaration
     FUNCTION function_declaration(param1 VARCHAR) RETURN INTEGER; */
  // Function Declaration
  ;
  !!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED FUNCTION IS NOT SUPPORTED IN THIS SCENARIO ***/!!!
  /*    FUNCTION function_definition
     RETURN INTEGER
     IS
     count INTEGER;
     PROCEDURE procedure_declaration(param1 INTEGER)
     IS
         BEGIN
              NULL;
         END;
    BEGIN
      RETURN count;
    end; */
  ;
  // Your logic to calculate the total employee count goes here
  return TOTAL_COUNT;
$$;
Copy

ベストプラクティス

  • 関数/プロシージャからネストされた宣言を削除します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0049

グローバル仮テーブルが参照されています。

注釈

この EWI は非推奨です。[SSC-FDM-0023](../functional-difference/generalFDM.md#ssc-fdm-0023)ドキュメントを参照してください。

重大性

説明

SnowConvert AI はグローバル仮テーブルを通常のテーブル作成に変換します。これらのテーブルへの参照は、予想とは異なる動作をする可能性があります。

コード例

入力
 create global temporary table t1 
    (col1 varchar); 
create view view1 as 
    select col1 from t1;
Copy
出力
 --** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE t1
    (col1 varchar)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE VIEW view1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
select col1 from
    !!!RESOLVE EWI!!! /*** SSC-EWI-0049 - A Global Temporary Table is being referenced ***/!!!
    t1;
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0052

使用できないオブジェクト

重大性

説明

このエラーは、ソースコードがサポートされていないパラメーターや変数を使用しているか、変換ツールによって認識されなかった場合に発生します。

コード例

入力コード(Oracle):
 -- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE PROCEDURE_PARAMETERS(PARAM SDO_GEOMETRY)
AS
    VARIABLE SDO_GEOMETRY;
BEGIN
    VARIABLE := PARAM;
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE PROCEDURE_PARAMETERS (PARAM GEOMETRY)
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    // REGION SnowConvert AI Helpers Code
    var formatDate = (arg) => (new Date(arg - (arg.getTimezoneOffset() * 60000))).toISOString().slice(0,-1);
    var fixBind = function (arg) {
        arg = arg instanceof Date ? formatDate(arg) : IS_NULL(arg) ? null : arg;
        return arg;
    };
    var SQL = {
        FOUND : false,
        NOTFOUND : false,
        ROWCOUNT : 0,
        ISOPEN : false
    };
    var _RS, _ROWS, SQLERRM = "normal, successful completion", SQLCODE = 0;
    var getObj = (_rs) => Object.assign(new Object(),_rs);
    var getRow = (_rs) => (values = Object.values(_rs)) && (values = values.splice(-1 * _rs.getColumnCount())) && values;
    var fetch = (_RS,_ROWS,fmode) => _RS.getRowCount() && _ROWS.next() && (fmode ? getObj : getRow)(_ROWS) || (fmode ? new Object() : []);
    var EXEC = function (stmt,binds,opts) {
        try {
            binds = !(arguments[1] instanceof Array) && ((opts = arguments[1]) && []) || (binds || []);
            opts = opts || new Object();
            binds = binds ? binds.map(fixBind) : binds;
            _RS = snowflake.createStatement({
                    sqlText : stmt,
                    binds : binds
                });
            _ROWS = _RS.execute();
            if (opts.sql !== 0) {
                var isSelect = stmt.toUpperCase().trimStart().startsWith("SELECT");
                var affectedRows = isSelect ? _RS.getRowCount() : _RS.getNumRowsAffected();
                SQL.FOUND = affectedRows != 0;
                SQL.NOTFOUND = affectedRows == 0;
                SQL.ROWCOUNT = affectedRows;
            }
            if (opts.row === 2) {
                return _ROWS;
            }
            var INTO = function (opts) {
                if (opts.vars == 1 && _RS.getColumnCount() == 1 && _ROWS.next()) {
                    return _ROWS.getColumnValue(1);
                }
                if (opts.rec instanceof Object && _ROWS.next()) {
                    var recordKeys = Object.keys(opts.rec);
                    Object.assign(opts.rec,Object.fromEntries(new Map(getRow(_ROWS).map((element,Index) => [recordKeys[Index],element]))))
                    return opts.rec;
                }
                return fetch(_RS,_ROWS,opts.row);
            };
            var BULK_INTO_COLLECTION = function (into) {
                for(let i = 0;i < _RS.getRowCount();i++) {
                    FETCH_INTO_COLLECTIONS(into,fetch(_RS,_ROWS,opts.row));
                }
                return into;
            };
            if (_ROWS.getRowCount() > 0) {
                return _ROWS.getRowCount() == 1 ? INTO(opts) : BULK_INTO_COLLECTION(opts);
            }
        } catch(error) {
            RAISE(error.code,error.name,error.message)
        }
    };
    var RAISE = function (code,name,message) {
        message === undefined && ([name,message] = [message,name])
        var error = new Error(message);
        error.name = name
        SQLERRM = `${(SQLCODE = (error.code = code))}: ${message}`
        throw error;
    };
    var FETCH_INTO_COLLECTIONS = function (collections,fetchValues) {
        for(let i = 0;i < collections.length;i++) {
            collections[i].push(fetchValues[i]);
        }
    };
    var IS_NULL = (arg) => !(arg || arg === 0);
    // END REGION

    let VARIABLE = new SDO_GEOMETRY();
    VARIABLE =
        !!!RESOLVE EWI!!! /*** SSC-EWI-0052 - UNUSABLE OBJECT PARAM, ITS DATATYPE WAS NOT TRANSFORMED ***/!!!
        PARAM;
$$;
Copy

ベストプラクティス

  • 使用されているデータ型の代替を探します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0053

オブジェクトが動作しない可能性があります。

重大性

説明

このエラーは、変換ツールが変数のデータ型を決定できなかった場合に発生します。これは、変数の宣言が欠落している可能性があるために起こる可能性があります。

コード例

入力コード(Oracle):
 -- Additional Params: -t javascript
CREATE OR REPLACE PROCEDURE PROCEDURE_VARIABLES
AS
    VARIABLE INTEGER;
BEGIN
    VARIABLE := ANOTHER_VARIABLE;
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE PROCEDURE_VARIABLES ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    // REGION SnowConvert AI Helpers Code
    var formatDate = (arg) => (new Date(arg - (arg.getTimezoneOffset() * 60000))).toISOString().slice(0,-1);
    var fixBind = function (arg) {
        arg = arg instanceof Date ? formatDate(arg) : IS_NULL(arg) ? null : arg;
        return arg;
    };
    var SQL = {
        FOUND : false,
        NOTFOUND : false,
        ROWCOUNT : 0,
        ISOPEN : false
    };
    var _RS, _ROWS, SQLERRM = "normal, successful completion", SQLCODE = 0;
    var getObj = (_rs) => Object.assign(new Object(),_rs);
    var getRow = (_rs) => (values = Object.values(_rs)) && (values = values.splice(-1 * _rs.getColumnCount())) && values;
    var fetch = (_RS,_ROWS,fmode) => _RS.getRowCount() && _ROWS.next() && (fmode ? getObj : getRow)(_ROWS) || (fmode ? new Object() : []);
    var EXEC = function (stmt,binds,opts) {
        try {
            binds = !(arguments[1] instanceof Array) && ((opts = arguments[1]) && []) || (binds || []);
            opts = opts || new Object();
            binds = binds ? binds.map(fixBind) : binds;
            _RS = snowflake.createStatement({
                    sqlText : stmt,
                    binds : binds
                });
            _ROWS = _RS.execute();
            if (opts.sql !== 0) {
                var isSelect = stmt.toUpperCase().trimStart().startsWith("SELECT");
                var affectedRows = isSelect ? _RS.getRowCount() : _RS.getNumRowsAffected();
                SQL.FOUND = affectedRows != 0;
                SQL.NOTFOUND = affectedRows == 0;
                SQL.ROWCOUNT = affectedRows;
            }
            if (opts.row === 2) {
                return _ROWS;
            }
            var INTO = function (opts) {
                if (opts.vars == 1 && _RS.getColumnCount() == 1 && _ROWS.next()) {
                    return _ROWS.getColumnValue(1);
                }
                if (opts.rec instanceof Object && _ROWS.next()) {
                    var recordKeys = Object.keys(opts.rec);
                    Object.assign(opts.rec,Object.fromEntries(new Map(getRow(_ROWS).map((element,Index) => [recordKeys[Index],element]))))
                    return opts.rec;
                }
                return fetch(_RS,_ROWS,opts.row);
            };
            var BULK_INTO_COLLECTION = function (into) {
                for(let i = 0;i < _RS.getRowCount();i++) {
                    FETCH_INTO_COLLECTIONS(into,fetch(_RS,_ROWS,opts.row));
                }
                return into;
            };
            if (_ROWS.getRowCount() > 0) {
                return _ROWS.getRowCount() == 1 ? INTO(opts) : BULK_INTO_COLLECTION(opts);
            }
        } catch(error) {
            RAISE(error.code,error.name,error.message)
        }
    };
    var RAISE = function (code,name,message) {
        message === undefined && ([name,message] = [message,name])
        var error = new Error(message);
        error.name = name
        SQLERRM = `${(SQLCODE = (error.code = code))}: ${message}`
        throw error;
    };
    var FETCH_INTO_COLLECTIONS = function (collections,fetchValues) {
        for(let i = 0;i < collections.length;i++) {
            collections[i].push(fetchValues[i]);
        }
    };
    var IS_NULL = (arg) => !(arg || arg === 0);
    // END REGION

    let VARIABLE;
    VARIABLE =
        !!!RESOLVE EWI!!! /*** SSC-EWI-0053 - OBJECT ANOTHER_VARIABLE MAY NOT WORK PROPERLY, ITS DATATYPE WAS NOT RECOGNIZED ***/!!!
        ANOTHER_VARIABLE;
$$;
Copy

ベストプラクティス

  • 入力コードに変数が宣言されていることを確認します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0054

サポートされていない外部結合サブクエリ

注釈

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

重大性

説明

このエラーは、OUTER JOIN(左、右、完全)の OR 論理式内に相関サブクエリがある場合に発生します。このような場合、一貫性のない結果が出たり、次のようなエラーが発生する可能性があります。

SQL コンパイルエラー。サポートされていないサブクエリ型は評価できません。

サブクエリに関するこれらの制限は、[Snowflakeドキュメント](https://docs.snowflake.com/ja/user-guide/querying-subqueries.html#limitations)で簡単に説明されており、それらに関する情報は[Snowflake フォーラム](https://community.snowflake.com/s/question/0D53r00009mIxwYCAS/sql-compilation-error-unsupported-subquery-type-cannot-be-evaluated)でも確認できます。

コード例

入力コード(Teradata):
 SELECT a.Column1, b.Column2
FROM
    TableA a
    LEFT JOIN TableB b ON (a.Column1 = b.Column1)
    AND (
        a.Column2 = b.Column2
        OR EXISTS(
            SELECT * FROM Table3 c
            WHERE c.Column1 = a.Column1
        )
    );
Copy
生成されたコード:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
    a.Column1,
    b.Column2
FROM
    TableA a
   LEFT JOIN
        TableB b ON (a.Column1 = b.Column1)
   AND (
       a.Column2 = b.Column2
       OR EXISTS
                !!!RESOLVE EWI!!! /*** SSC-EWI-0054 - CORRELATED SUBQUERIES WITHIN AN OR EXPRESSION OF AN OUTER JOIN COULD CAUSE COMPILATION ERRORS ***/!!!(
                    SELECT
                        * FROM
                        Table3 c
                               WHERE c.Column1 = a.Column1
       )
   );
Copy

ベストプラクティス

  • 出力コードがコンパイルエラーが発生しないことを確認します。

  • 出力コードの機能的等価性を検証します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0056

作成型はサポートされていません

重大性

説明

このメッセージは変換可能なカスタムタイプが定義されているときに表示され、コメントされている変換可能なカスタムタイプに関するフィードバックを追加します。

注釈

型定義はコメントされていますが、使用法の解決には引き続き考慮されます。詳しくは SSC-EWI-0062を参照してください。

コード例

入力コード(Oracle):
 CREATE TYPE type1 AS OBJECT (column1 INT);

CREATE OR REPLACE PROCEDURE record_procedure
IS
    TYPE record_typ IS RECORD(col1 INTEGER, col2 FLOAT);
BEGIN
    NULL;
END;
Copy
生成されたコード:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type1 AS OBJECT (column1 INT)
;

CREATE OR REPLACE PROCEDURE record_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        !!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO OBJECT ***/!!!
        TYPE record_typ IS RECORD(col1 INTEGER, col2 FLOAT);
    BEGIN
        NULL;
    END;
$$;
Copy

ベストプラクティス

  • エンドユーザーによる操作は必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0058

機能は現在、Snowflakeスクリプトではサポートされていません

重大性

説明

このエラーは、作成プロシージャで使用されるステートメントが現在Snowflakeスクリプトでサポートされていない場合に発生します。

コード例

入力コード(Oracle):
 CREATE OR REPLACE PROCEDURE PROC01
IS
  number_variable INTEGER;
BEGIN
  EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    number_variable INTEGER;
  BEGIN
    !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL'
                                           !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'EXECUTE IMMEDIATE RETURNING CLAUSE' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
                                           INTO number_variable;
  END;
$$;
Copy

ベストプラクティス

  • エンドユーザーの操作は必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0062

カスタム型の使用法がバリアントに変更されました

重大性

説明

このメッセージはカスタムタイプが参照され、その使用法がバリアントに変更されたときに表示されます。

注釈

このメッセージは、SSC-EWI-0056 に大きく関連しています。

コード例

入力コード(Oracle):
 CREATE TYPE type1 AS OBJECT(type1_column1 INT);

CREATE TABLE table1
(
column1 type1
);
Copy
生成されたコード:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type1 AS OBJECT(type1_column1 INT)
;

CREATE OR REPLACE TABLE table1
(
column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'type1' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
;

CREATE OR REPLACE VIEW table1_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
AS
SELECT
column1:type1_column1 :: VARCHAR AS type1_column1
FROM
table1;
Copy

ベストプラクティス

  • すべての入力データをバリアント準拠のデータ型に変換することも忘れないでください。

  • さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。

SSC-EWI-0064

クエリで参照されているカスタム型が見つかりません

重大性

説明

このエラーは、DML ステートメントのソースでカスタムタイプが定義されていない場合に発生します。たとえば、UDT の可能性があるテーブル列が定義されていない場合などです。

警告

DDL クエリで参照されたSSC-FDM-0015と混同しないでください。

コード例

入力コード(Oracle):
 --Type was never defined
--CREATE TYPE type1;

CREATE TABLE table1
(
--the type will be unresolved
column1 type1
);

SELECT
column1
FROM table1;
Copy
生成されたコード:
 --Type was never defined
--CREATE TYPE type1;
!!!RESOLVE EWI!!! /*** SSC-EWI-0050 - MISSING DEPENDENT OBJECT "type1" ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0063 - 'PUBLIC.table1_view' ADDED BECAUSE 'table1' USED A CUSTOM TYPE ***/!!!
CREATE OR REPLACE TABLE table1
(
--the type will be unresolved
column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0064 - REFERENCED CUSTOM TYPE 'type1' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/!!! /*** SSC-FDM-0015 - DATA TYPE 'type1' NOT RECOGNIZED ***/
);

CREATE OR REPLACE VIEW PUBLIC.table1_view
AS
SELECT
column1
FROM
table1;

SELECT
column1 !!!RESOLVE EWI!!! /*** SSC-EWI-0064 - REFERENCED CUSTOM TYPE 'type1' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/!!!
FROM
table1;
Copy

ベストプラクティス

  • 参照された型が入力コードで定義されていることを確認します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0066

式はSnowflakeではサポートされていません。

重大度

説明

このエラーは、特定のがSnowflakeでサポートされていないことを通知するために使用されます。

コード例

入力コード:
 SELECT * from T1 where (cast('2016-03-17' as DATE), 
       cast('2016-03-21' as DATE)) OVERLAPS
       (cast('2016-03-20' as DATE), cast('2016-03-22' as DATE));
Copy
出力コード:
 SELECT * from
       T1
where
       !!!RESOLVE EWI!!! /*** SSC-EWI-0066 - EXPRESSION 'OVERLAPS' IS NOT SUPPORTED IN SNOWFLAKE. ***/!!! (cast('2016-03-17' as DATE),
       cast('2016-03-21' as DATE)) OVERLAPS
       (cast('2016-03-20' as DATE), cast('2016-03-22' as DATE));
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0067

UDF がSnowflakeプロシージャに変換されたため、クエリ内でのプロシージャの呼び出しはサポートされていません。

重大性

説明

このエラーは、UDF (ユーザー定義関数)への呼び出しがクエリ内で見つかった場合に追加されます。Oracle UDFs および UDFs 内のパッケージと、一部の SQL サーバー UDFs は、Snowflake ストアドプロシージャに変換され、クエリから呼び出すことはできません。

関数は等価性を維持するためにストアドプロシージャに変換され、関数の呼び出しは空のSnowflake UDF 関数に変換されます。

注釈

この EWI は [SSC-EWI-0068](../functional-difference/generalFDM.md#ssc-fdm-0029)に強く関連しています。

コード例

SQL Server:
入力コード
 CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
    DECLARE @i int = 0, @p int;
    Select @p = COUNT(*) FROM PURCHASING.VENDOR
    
    WHILE (@p < 1000)
    BEGIN
        SET @i = @i + 1
        SET @p = @p + @i
    END
        
    IF (@i = 6)
        RETURN 1
    
    RETURN @p
END;
GO

SELECT PURCHASING.FOO() AS RESULT;
Copy
生成コード
!!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "PURCHASING.VENDOR" **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        I INT := 0;
        P INT;
    BEGIN
         
        Select
            COUNT(*)
        INTO
            :P
 FROM
            PURCHASING.VENDOR;
        WHILE (:P < 1000) LOOP
            I := :I + 1;
            P := :P + :I;
        END LOOP;
        IF ((:I = 6)) THEN
            RETURN 1;
        END IF;
        RETURN :P;
    END;
$$;

SELECT
    PURCHASING.FOO() !!!RESOLVE EWI!!! /*** SSC-EWI-0067 - UDF WAS TRANSFORMED TO SNOWFLAKE PROCEDURE, CALLING PROCEDURES INSIDE QUERIES IS NOT SUPPORTED ***/!!! AS RESULT;
Copy
Oracle:
入力コード
 CREATE FUNCTION employee_function (param1 in NUMBER) RETURN NUMBER is
  var1    employees.employee_ID%TYPE;
  var2    employees.manager_ID%TYPE;
  var3    employees.title%TYPE;
BEGIN
  SELECT employee_ID, manager_ID, title
  INTO var1, var2, var3
  FROM employees
    START WITH manager_ID = param1
    CONNECT BY manager_ID = PRIOR employee_id;
  RETURN var1;
EXCEPTION
   WHEN no_data_found THEN RETURN param1;
END employee_function;

SELECT employee_function(2) FROM employees;
Copy
生成コード
 !!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "employees" **
CREATE OR REPLACE PROCEDURE employee_function (param1 NUMBER(38, 18))
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/10/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    var1    employees.employee_ID%TYPE;
    var2    employees.manager_ID%TYPE;
    var3    employees.title%TYPE;
  BEGIN
    SELECT employee_ID, manager_ID, title
    INTO
      :var1,
      :var2,
      :var3
    FROM
      employees
      START WITH manager_ID = :param1
    CONNECT BY
      manager_ID = PRIOR employee_id;
    RETURN :var1;
  EXCEPTION
     WHEN no_data_found THEN
      RETURN :param1;
  END;
$$;

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "employees" **

SELECT
  !!!RESOLVE EWI!!! /*** SSC-EWI-0067 - UDF WAS TRANSFORMED TO SNOWFLAKE PROCEDURE, CALLING PROCEDURES INSIDE QUERIES IS NOT SUPPORTED ***/!!! employee_function(2) FROM
  employees;
Copy

ベストプラクティス

  • ソースコードは、Snowflakeユーザー定義関数[アプローチ](https://docs.snowflake.com/ja/sql-reference/user-defined-functions.html#udfs-user-defined-functions)に適合するように再構築する必要がある場合があります。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0068

ユーザー定義関数がSnowflakeプロシージャに変換されました。

Snowflakeユーザー定義関数は、Oracle や SQL サーバーと同じ機能をサポートしていません。機能の等価性を維持するために、関数はSnowflakeストアドプロシージャに変換されます。これはクエリでの使用にも影響します。

コード例

SQL Server:

入力コード
 CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
    DECLARE @i int = 0, @p int;
    Select @p = COUNT(*) FROM PURCHASING.VENDOR
    
    WHILE (@p < 1000)
    BEGIN
        SET @i = @i + 1
        SET @p = @p + @i
    END
        
    IF (@i = 6)
        RETURN 1
    
    RETURN @p
END;
Copy
生成コード
 !!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "06/25/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        I INT := 0;
        P INT;
    BEGIN
         
        Select
            COUNT(*)
        INTO
            :P
 FROM
            PURCHASING.VENDOR;
        WHILE (:P < 1000) LOOP
            I := :I + 1;
            P := :P + :I;
        END LOOP;
        IF ((:I = 6)) THEN
            RETURN 1;
        END IF;
        RETURN :P;
    END;
$$;
Copy
Oracle:
入力コード
CREATE OR REPLACE FUNCTION FUN1(PAR1 VARCHAR)
RETURN VARCHAR
IS
    VAR1 VARCHAR(20);
    VAR2 VARCHAR(20);
BEGIN
    SELECT COL1 INTO VAR1 FROM TABLE1 where col1 = 1;
    VAR2 := PAR1 || VAR1;
    RETURN VAR2;
END;
/
生成コード
 !!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FUN1(PAR1 VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    VAR1 VARCHAR(20);
    VAR2 VARCHAR(20);
  BEGIN
    SELECT COL1 INTO
      :VAR1
    FROM
      TABLE1
    where col1 = 1;
    VAR2 := NVL(:PAR1 :: STRING, '') || NVL(:VAR1 :: STRING, '');
    RETURN :VAR2;
  END;
$$;
Copy

ベストプラクティス

  • 同じロジックを維持するために、内部のクエリを分離します。

  • ソースコードは、Snowflakeユーザー定義関数[アプローチ](https://docs.snowflake.com/ja/sql-reference/user-defined-functions.html#udfs-user-defined-functions)に適合するように再構築する必要がある場合があります。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0073

機能的同等性レビューを保留中

重大性

説明

この EWI は、SnowConvert AI 開発チームによってまだレビューされていない文法句が入力プラットフォームにある場合に、Snowflakeでサポートを提供するために追加されます。これは、コードはまったく変換されていないことを意味し、手動で修正しなければSnowflakeでは動作しない可能性があります。

コード例

SQLServer:
入力コード
 CREATE OR ALTER PROC SampleProcedure
AS
BEGIN
   INSERT INTO aTable (columnA = 'varcharValue', columnB = 1);
   INSERT exampleTable VALUES ('Hello', 23);
   INSERT INTO exampleTable DEFAULT VALUES;
END
Copy
生成コード
 CREATE OR REPLACE PROCEDURE SampleProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
   BEGIN
      INSERT INTO aTable (columnA = 'varcharValue', columnB = 1);
      INSERT INTO exampleTable VALUES ('Hello', 23);
      !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'INSERT WITH DEFAULT VALUES' NODE ***/!!!
      INSERT INTO exampleTable DEFAULT VALUES;
   END;
$$;
Copy

入力コードの6行目に、DEFAULT VALUES を指定した INSERT ステートメントへの参照があることに注目してください。これは現在、SnowConvert AI ではサポートされていないステートメントであり、そのため11行目と12行目でEWI が生成されています。

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0077

CTE 呼び出しの間にサイクルが見つかりました。CTEs を順序付けることができません。

重大性

説明

この警告は、CTE(共通テーブル式)参照呼び出しが複数あるクエリが、CTEs の呼び出し順序を決定できないサイクルを作成し、CTEs を順序付けることができず、クエリがソースとして残る場合に追加されます。

コード例

入力コード(Teradata):
 WITH t1(c1) as (SELECT c1 FROM t2),
     t2(c2) as (SELECT c2 FROM t3),
     RECURSIVE t3(c3) as (SELECT c3, someOtherColumn FROM t1, t3)
     SELECT * FROM t1;
Copy
生成されたコード:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0077 - CYCLE FOUND BETWEEN CTE REFERENCE CALLS, CTES CANNOT BE ORDERED AND THE QUERY WILL REMAIN AS ORIGINAL ***/!!!
WITH RECURSIVE t1(c1) AS
(
     SELECT
          c1 FROM t2
),
t2(c2) AS
(
     SELECT
          c2 FROM t3
),
t3(c3) AS
(
     SELECT
          c3,
          someOtherColumn FROM t1, t3
)
SELECT
     * FROM t1;
Copy

ベストプラクティス

  • ユーザーによる追加のアクションは必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0080

バイナリ列ではデフォルト値は許可されません

重大度

説明

この EWI は、ソースコードに SnowFlake SQL ではサポートされていない BINARY データ型のデフォルト値を持つ場合に追加されます。

コード例

入力コード(SqlServer):

 create table test1345
(
  key1 binary default 0
);
Copy

出力コード:

 CREATE OR REPLACE TABLE test1345
(
  key1 BINARY
              !!!RESOLVE EWI!!! /*** SSC-EWI-0080 - DEFAULT VALUE IS NOT ALLOWED ON BINARY COLUMNS ***/!!!
              default 0
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Copy
ベストプラクティス
  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0084

XMLTABLE はサポートされていません。

重大性

説明

XMLTABLE 関数は現在サポートされていません。

コード例

入力コード(DB2):
 SELECT
    *
FROM
    XMLTABLE(
        'stringValue' PASSING BY REF passingExpr AS AliasName
    ) AS XMLTABLENAME
Copy
生成されたコード:
 SELECT
    *
FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-0084 - XMLTABLE IS NOT SUPPORTED BY SNOWFLAKE ***/!!!
    XMLTABLE(
        'stringValue' PASSING BY REF passingExpr AS AliasName
    ) AS XMLTABLENAME
Copy

ベストプラクティス

  • Snowlflakeでの XML 変換については、こちらの[ブログ](https://www.snowflake.com/blog/easily-load-xml-sql/)を確認してください。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0086

新しい識別子の無効な文字を置き換えました

注釈

この EWI は非推奨です。[SSC-FDM-0030](../functional-difference/generalFDM.md#ssc-fdm-0030)ドキュメントを参照してください。

重大性

説明

指定された識別子は、出力言語に対して無効な文字を持っています。これらの文字は、UTF -8コードに置き換えられました。

コード例

入力コード(Oracle):
 CREATE PROCEDURE PROC1
AS
    "VAR0" INT;
    "VAR`/1ͷ" VARCHAR(20);
    "o*/o" FLOAT;
    " . " INT;
    ". ." INT;
    "123Name" INT;
    "return" INT;
    yield INT;
    ident#10 INT;
BEGIN
    NULL;
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        "VAR0" INT;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0086 - IDENTIFIER '"VAR`/1ͷ"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES ***/!!!
        VAR_u60_u2F1ͷ VARCHAR(20);
        !!!RESOLVE EWI!!! /*** SSC-EWI-0086 - IDENTIFIER '"o*/o"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES ***/!!!
        o_u2A_u2Fo FLOAT;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0086 - IDENTIFIER '" . "' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES ***/!!!
        _u20_u2E_u20 INT;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0086 - IDENTIFIER '". ."' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES ***/!!!
        _u2E_u20_u2E INT;
        "123Name" INT;
        "return" INT;
        yield INT;
        IDENT_HASHTAG_10 INT;
    BEGIN
        NULL;
    END;
$$;
Copy

ベストプラクティス

  • エンドユーザーの操作は必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0092

マテリアライズドビューが通常のビューに変換されました。

危険

非推奨

重大性

説明

Snowflakeマテリアライズドビューには、[こちら](https://docs.snowflake.com/ja/user-guide/views-materialized.html#label-limitations-on-creating-materialized-views)に記載されている特定の制限があります。現在、すべてのマテリアライズドビューは、それらが持っていた追加の句なしで通常のビューに変換されています。将来的には、SnowConvert AI はサポートされるケースをSnowflakeマテリアライズドビューに変換する予定です。

コード例

入力コード:
 CREATE MATERIALIZED VIEW MATERIALIZED_VIEW1
SEGMENT CREATION IMMEDIATE
ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
INMEMORY PRIORITY NONE MEMCOMPRESS FOR QUERY LOW DISTRIBUTE AUTO NO DUPLICATE
AS
select
   *
from
   aTable;
Copy
生成されたコード:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0092 - MATERIALIZED VIEW WAS CONVERTED TO REGULAR VIEW. ***/!!!
CREATE OR REPLACE VIEW MATERIALIZED_VIEW1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
select
   *
from
   aTable;
Copy

ベストプラクティス

  • ユーザーによる追加のアクションは必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0094

ラベル宣言がサポートされていません

重大性

説明

現在、Snowスクリプトにはラベル宣言に相当するものがないため、EWI が追加され、ラベルはコメントアウトされます。

コード例

入力コード(Oracle):
 CREATE OR REPLACE PROCEDURE Example ( grade NUMBER )
IS
BEGIN
	<<CASE1>><<CASE2>>
	CASE grade
		WHEN 10 THEN NULL;
		ELSE NULL;
	END CASE CASE1;
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE Example (grade NUMBER(38, 18))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	BEGIN
		!!!RESOLVE EWI!!! /*** SSC-EWI-0094 - LABEL DECLARATION FOR A STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING <<CASE1>><<CASE2>> ***/!!!
		CASE :grade
			WHEN 10 THEN
				NULL;
			ELSE NULL;
		END CASE;
	END;
$$;
Copy

ベストプラクティス

  • エンドユーザーによる操作は必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0101

トランザクションラベル名はSnowflakeでは適用されないため、コメントアウトされました

重大性

説明

異なるCOMMIT またはROLLBACK ステートメントで識別するネストされたトランザクションが存在してはならないため、Snowflakeはトランザクションラベル名を操作しません。

コード例

入力コード(SQL Server):
 CREATE PROCEDURE TestTransaction
AS
BEGIN
    DROP TABLE IF EXISTS NEWTABLE;
    CREATE TABLE NEWTABLE(COL1 INT, COL2 VARCHAR);
      BEGIN TRANSACTION LabelA;
        INSERT INTO NEWTABLE VALUES (1, 'MICHAEL');
        INSERT INTO NEWTABLE VALUES(2, 'JACKSON');
      COMMIT TRANSACTION LabelA;
END
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE TestTransaction ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        DROP TABLE IF EXISTS NEWTABLE;
        CREATE OR REPLACE TABLE NEWTABLE (
            COL1 INT,
            COL2 VARCHAR
        );
            BEGIN TRANSACTION
            !!!RESOLVE EWI!!! /*** SSC-EWI-0101 - COMMENTED OUT TRANSACTION LABEL NAME BECAUSE IS NOT APPLICABLE IN SNOWFLAKE ***/!!!
            LabelA;
            INSERT INTO NEWTABLE VALUES (1, 'MICHAEL');
        INSERT INTO NEWTABLE VALUES(2, 'JACKSON');
            COMMIT;
    END;
$$;
Copy

ベストプラクティス

  • エンドユーザーによる操作は必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0102

コードからステートメントオプションを削除しました。これは、Snowflakeへの変換時に既に処理されています

注釈

この EWI は非推奨です。

重大性

説明

Snowflakeステートメントでは、変換ルールによって処理されるときに、一部のオプションが削除される可能性があります。そのため、出力コードからは削除されますが、機能は同じです。

コード例

入力コード(PostgreSQL):
 -- Case 1:
TRUNCATE ONLY table_base2 RESTART IDENTITY CASCADE;

-- Case 2:
TRUNCATE TABLE table_inherit_and_generated RESTART IDENTITY CASCADE;
Copy
生成されたコード:
 -- Case 1:
!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED ONLY OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED CASCADE OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED RESTART IDENTITY OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!
TRUNCATE table_base2;

-- Case 2:
!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED CASCADE OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED RESTART IDENTITY OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!
TRUNCATE TABLE table_inherit_and_generated;
Copy

ベストプラクティス

  • エンドユーザーによる操作は必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0107

現在のシナリオではサポートされていないインターバルリテラル

重大性

説明

Snowflakeインターバルは算術演算でのみ使用できます。その他のシナリオで使用されるインターバルはサポートされていません。

コード例

入力コード:

 SELECT INTERVAL '1-5' YEAR TO MONTH FROM DUAL;
Copy

出力コード:

 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0107 - INTERVAL LITERAL IS NOT SUPPORTED BY SNOWFLAKE IN THIS SCENARIO  ***/!!!
 INTERVAL '1-5' YEAR TO MONTH FROM DUAL;
Copy
ベストプラクティス
  • エンドユーザーによる操作は必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0108

以下のサブクエリは、無効とみなされるパターンの少なくとも1つにマッチし、コンパイルエラーが発生する可能性があります。

重大性

説明

Snowflakeでは、サブクエリの中にサポートされていない複数のパターンや要素があり、実行可能ではありません。[サブクエリに関するSnowflakeドキュメント](https://docs.snowflake.com/ja/user-guide/querying-subqueries#types-supported-by-snowflake)によると、以下のサブクエリ型が サポートされています

  • 値式を使用できる任意の場所での無相関のスカラーサブクエリ。

  • WHERE 句の相関スカラーサブクエリ。

  • EXISTS、ANY / ALL、および IN サブクエリの WHERE 句。これらのサブクエリは、相関の場合と非相関の場合があります。

上記のリストは網羅的なものではないことに注意してください。つまり、指定された型のいずれにも一致しないサブクエリも有効と見なされる場合があります。

エラーを回避するために、SnowConvert AI は、通常サブクエリを無効にするサブクエリパターンのセットを知っています。この EWI は、サブクエリがこれらのパターンの少なくとも1つに一致するため、Snowflakeでコンパイルしたときにエラーが発生する可能性があることを警告するために追加されます。

コード例

入力コード:
 CREATE TABLE tableA
(
    col1 INTEGER,
    col2 VARCHAR(20)
);

CREATE TABLE tableB
(
    col3 INTEGER,
    col4 VARCHAR(20)
);

INSERT INTO tableA VALUES (50, 'Hey');

INSERT INTO tableB VALUES (50, 'Hey');
INSERT INTO tableB VALUES (50, 'Example');
INSERT INTO tableB VALUES (10, 'Bye');

-- Snowflake only allows the usage of FETCH in subqueries that are uncorrelated scalar, this subquery execution will fail
SELECT col2
FROM tableA
WHERE col2 = (SELECT col4 FROM tableB WHERE col3 = col1 FETCH FIRST ROW ONLY);

-- This subquery is uncorrelated scalar so FETCH is valid to use
SELECT col2
FROM tableA
WHERE col2 = (SELECT col4 FROM tableB FETCH FIRST ROW ONLY);
Copy
生成されたコード:
 CREATE OR REPLACE TABLE tableA
    (
        col1 INTEGER,
        col2 VARCHAR(20)
    )
    COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/05/2024",  "domain": "test" }}'
    ;

    CREATE OR REPLACE TABLE tableB
    (
        col3 INTEGER,
        col4 VARCHAR(20)
    )
    COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/05/2024",  "domain": "test" }}'
    ;

    INSERT INTO tableA
    VALUES (50, 'Hey');

    INSERT INTO tableB
    VALUES (50, 'Hey');

    INSERT INTO tableB
    VALUES (50, 'Example');

    INSERT INTO tableB
    VALUES (10, 'Bye');

    -- Snowflake only allows the usage of FETCH in subqueries that are uncorrelated scalar, this subquery execution will fail
SELECT col2
FROM
    tableA
    WHERE col2 =
                 --** SSC-FDM-0002 - CORRELATED SUBQUERIES MAY HAVE SOME FUNCTIONAL DIFFERENCES. **
                 !!!RESOLVE EWI!!! /*** SSC-EWI-0108 - THE FOLLOWING SUBQUERY MATCHES AT LEAST ONE OF THE PATTERNS CONSIDERED INVALID AND MAY PRODUCE COMPILATION ERRORS ***/!!! (SELECT
                         ANY_VALUE( col4) FROM
                         tableB
                     WHERE col3 = col1
                     FETCH FIRST 1 ROW ONLY);

    -- This subquery is uncorrelated scalar so FETCH is valid to use
SELECT col2
FROM
    tableA
    WHERE col2 = (SELECT col4 FROM
                         tableB
                     FETCH FIRST 1 ROW ONLY);
Copy

ベストプラクティス

  • Snowflakeでサブクエリをチェックして、問題なくコンパイルできる場合、このEWI は無視しても問題ありません。

  • 評価レポートのサブクエリに関する複雑なパターンセクションを確認してください。通常サブクエリを無効にするパターンとその発生のリストが含まれており、移行されたサブクエリとそれらが無効とみなされる理由を確認するために使用できます。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0109

Alter Table構文はSnowflakeでは使用できません。

重大性

説明

使用されているAlter Table構文はSnowflakeでは適用できないため、このメッセージが追加されています。

コード例:

入力コード:
 ALTER TABLE SOMENAME DEFAULT COLLATION SOMENAME;

ALTER TABLE SOMENAME ROW ARCHIVAL;

ALTER TABLE SOMENAME MODIFY CLUSTERING;

ALTER TABLE SOMENAME DROP CLUSTERING;

ALTER TABLE SOMENAME SHRINK SPACE COMPACT CASCADE;
Copy
生成されたコード:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!

ALTER TABLE SOMENAME
DEFAULT COLLATION SOMENAME;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!

ALTER TABLE SOMENAME
ROW ARCHIVAL;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!

ALTER TABLE SOMENAME
MODIFY CLUSTERING;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!

ALTER TABLE SOMENAME
DROP CLUSTERING;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!


ALTER TABLE SOMENAME
SHRINK SPACE COMPACT CASCADE;
Copy

ベストプラクティス

  • ユーザーによる追加のアクションは必要ありません。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0110

依存関係が見つからないために変換が実行されない

重大性

説明

依存関係が欠落している場合、EWI は変換が実行できないことを示すために追加されます。SnowConvert AI は抽象構文ツリーを利用して入力コードのセマンティックモデルを作成し、それを使って元のソースの機能を複製する新しいコードを生成します。しかし、この特定のシナリオでは、セマンティックモデルに特定の依存関係がないため、変換を完了できませんでした。

コード例

入力コード:
 ALTER TABLE MissingTable ADD
CONSTRAINT constraint1  DEFAULT (suser_name()) FOR col1;
Copy
生成されたコード:
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "MissingTable" **
!!!RESOLVE EWI!!! /*** SSC-EWI-0110 - TRANSFORMATION NOT PERFORMED DUE TO MISSING DEPENDENCIES ***/!!!

ALTER TABLE MissingTable
ADD
CONSTRAINT constraint1 DEFAULT (CURRENT_USER()) FOR col1;
Copy

ベストプラクティス

  • 不足している依存関係を入力コードに追加します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0111

Snowflakeでは、ネストされたプロシージャには1つのレベルしか許可されません。

重大性

Critical

説明

Snowflakeは、プロシージャのネストレベルを1つだけサポートします。ネストされたプロシージャの中に別のネストされたプロシージャを定義することは許可されていません。このパターンが検出されると、このエラーが発生します。

コード例

入力コード:
CREATE OR REPLACE PROCEDURE calculate_executive_salary (
    p_result OUT NUMBER
)
AS
    PROCEDURE calculate_senior_level (
        senior_result OUT NUMBER
    )
    AS
        PROCEDURE calculate_base_level (
            base_result OUT NUMBER
        )
        AS
        BEGIN
            base_result := 75000;
        END calculate_base_level;
    BEGIN
        calculate_base_level(senior_result);
        senior_result := senior_result * 1.5;
    END calculate_senior_level;
BEGIN
    calculate_senior_level(p_result);
END calculate_executive_salary;
Copy
生成されたコード:
CREATE OR REPLACE PROCEDURE calculate_executive_salary (p_result OUT NUMBER(38, 18)
    )
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/22/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
        DECLARE
        calculate_senior_level PROCEDURE (senior_result NUMBER(38, 18)
           )
        RETURNS NUMBER
        AS
            DECLARE
                !!!RESOLVE EWI!!! /*** SSC-EWI-0111 - ONLY ONE LEVEL OF NESTING IS ALLOWED FOR NESTED PROCEDURES IN SNOWFLAKE. ***/!!!
                PROCEDURE calculate_base_level (
                    base_result OUT NUMBER
                )
                AS
                BEGIN
                    base_result := 75000;
                END calculate_base_level;
                call_results NUMBER;
            BEGIN
                call_results := (
                CALL
                calculate_base_level(:senior_result)
                );
                senior_result := :call_results;
                senior_result := :senior_result * 1.5;
                RETURN senior_result;
            END;
        call_results NUMBER;
        BEGIN
        call_results := (
            CALL
            calculate_senior_level(:p_result)
        );
        p_result := :call_results;
        END;
$$;
Copy

ベストプラクティス

  • 複数レベルのネストされたプロシージャを回避するためにコードをリファクタリングします。深くネストされたプロシージャをトップレベルに移動するか、Snowflakeの単一レベルのネスト制限に準拠するようにロジックを再構築します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0112

ネストされたプロシージャのオーバーロードはサポートされていません。

重大性

Critical

説明

Snowflakeは、ネストされたプロシージャのオーバーロードをサポートしていません。つまり、同じ親プロシージャの中で、同じ名前で異なるパラメーターリストを持つ複数のネストされたプロシージャを定義することはできません。ソースコードにオーバーロードされたネストされたプロシージャが含まれている場合、このエラーはそのようなパターンがSnowflakeでサポートされていないことを示すために生成されます。

コード例

入力コード:
CREATE OR REPLACE PROCEDURE demonstrate_salary_calculations(
    final_summary OUT VARCHAR2
)
AS
    result1 VARCHAR2(100);
    result2 VARCHAR2(100);
    result3 VARCHAR2(100);

    PROCEDURE calculate_salary(
        output OUT VARCHAR2
    )
    AS
    BEGIN
        output := 'Standard: 55000';
    END;

    PROCEDURE calculate_salary(
        base_amount IN NUMBER,
        output OUT VARCHAR2
    )
    AS
    BEGIN
        output := 'Calculated: ' || (base_amount * 1.15);
    END;

    PROCEDURE calculate_salary(
        employee_level IN VARCHAR2,
        output OUT VARCHAR2
    )
    AS
    BEGIN
        output := 'Level ' || UPPER(employee_level) || ': 60000';
    END;

BEGIN
    calculate_salary(result1);
    calculate_salary(50000, result2);
    calculate_salary('senior', result3);
    final_summary := result1 || ' | ' || result2 || ' | ' || result3;
END demonstrate_salary_calculations;
Copy
生成されたコード:
CREATE OR REPLACE PROCEDURE demonstrate_salary_calculations (final_summary OUT VARCHAR
    )
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/22/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
        DECLARE
        result1 VARCHAR(100);
        result2 VARCHAR(100);
        result3 VARCHAR(100);
        calculate_salary PROCEDURE(output VARCHAR
            )
        RETURNS VARCHAR
        AS
            BEGIN
                output := 'Standard: 55000';
                RETURN output;
            END;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0112 - NESTED PROCEDURE OVERLOADING IS NOT SUPPORTED. ***/!!!
        calculate_salary PROCEDURE(base_amount NUMBER(38, 18), output VARCHAR
            )
        RETURNS VARCHAR
        AS
            BEGIN
                output := 'Calculated: ' || NVL((:base_amount * 1.15) :: STRING, '');
                RETURN output;
            END;
        !!!RESOLVE EWI!!! /*** SSC-EWI-0112 - NESTED PROCEDURE OVERLOADING IS NOT SUPPORTED. ***/!!!
        calculate_salary PROCEDURE(employee_level VARCHAR, output VARCHAR
            )
        RETURNS VARCHAR
        AS
            BEGIN
                output := 'Level ' || NVL(UPPER(:employee_level) :: STRING, '') || ': 60000';
                RETURN output;
            END;
        call_results VARCHAR;
        BEGIN
        call_results := (
            CALL
            calculate_salary(:result1)
        );
        result1 := :call_results;
        call_results := (
            CALL
            calculate_salary(50000, :result2)
        );
        result2 := :call_results;
        call_results := (
            CALL
            calculate_salary('senior', :result3)
        );
        result3 := :call_results;
        final_summary := NVL(:result1 :: STRING, '') || ' | ' || NVL(:result2 :: STRING, '') || ' | ' || NVL(:result3 :: STRING, '');
        END;
$$;
Copy

ベストプラクティス

  • Snowflakeでネストされたプロシージャをオーバーロードしようとすると、コンパイルエラーや予期しない動作が発生します。互換性を確保するためには、ネストされたプロシージャをオーバーロードしないようにコードをリファクタリングする必要があります。ネストされた各プロシージャがそのスコープ内で一意な名前を持つようにプロシージャの名前を変更するか、オーバーロードの必要性を排除するためにロジックを再構築することを検討してください。さらに、すべてのプロシージャ呼び出しを確認して更新し、新しい一意の名前を使用します。

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0113

このシナリオでは、Snowflakeスクリプト UDF の使用はサポートされていません。

重大性

説明

特定のシナリオにおけるSnowflake Scritping UDFs の使用はサポートされていません。次のケースはサポートされていません。

  • Snowflakeスクリプト UDFs は、マテリアライズドビューを作成する場合には使用できません。

  • Snowflakeスクリプト UDFs は、デフォルトの列値を指定するためには使用できません。

コード例

入力コード:
CREATE TABLE Table1 (
  col1 INT DEFAULT SnowScriptUdf()
);

CREATE MATERIALIZED VIEW CreateView1
AS
SELECT 
  col1,
  SnowScriptUdf() AS col2
FROM Table1;
Copy
生成されたコード:
CREATE OR REPLACE TABLE Table1 (
col1 INT DEFAULT SnowScriptUdf() !!!RESOLVE EWI!!! /*** SSC-EWI-0113 - THE USAGE OF SNOWFLAKE SCRIPTING UDF IS NOT SUPPORTED IN THIS SCENARIO. ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "09/17/2025",  "domain": "no-domain-provided" }}'
;

CREATE OR REPLACE DYNAMIC TABLE CreateView1
--** 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": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "09/17/2025",  "domain": "no-domain-provided" }}'
AS
SELECT
      col1,
      SnowScriptUdf() !!!RESOLVE EWI!!! /*** SSC-EWI-0113 - THE USAGE OF SNOWFLAKE SCRIPTING UDF IS NOT SUPPORTED IN THIS SCENARIO. ***/!!! AS col2
FROM
      Table1;
Copy

ベストプラクティス

  • さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。

SSC-EWI-0114

MIXED CONTINUE AND EXIT EXCEPTION HANDLERS IN THE SAME BLOCK ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING.

重大性

注釈

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

説明

In database systems like DB2, Teradata, and others, it is possible to declare both CONTINUE and EXIT exception handlers in the same procedural block. However, Snowflake Scripting does not support mixing CONTINUE and EXIT handlers within the same EXCEPTION block.

When SnowConvert AI encounters a procedure with both types of handlers declared in the same block, it generates separate EXCEPTION blocks for each handler type and adds this EWI to indicate that manual review and testing are required to ensure the converted code maintains the intended behavior.

Key Behavioral Differences:

  • CONTINUE HANDLER: Allows execution to continue after handling the exception

  • EXIT HANDLER: Terminates the current block after handling the exception

Since Snowflake cannot mix these behaviors in a single EXCEPTION block, the conversion may result in different execution flow compared to the source system.

コード例

入力コード:

DB2

CREATE OR REPLACE PROCEDURE with_continueAndExit()
BEGIN
    DECLARE test_1 INTEGER DEFAULT 10;
    
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
        INSERT INTO error_test VALUES ('EXCEPTION');
    
    DECLARE EXIT HANDLER FOR SQLSTATE '20000' 
        INSERT INTO error_test VALUES ('ERROR 2000');
    
    SET test_1 = 1 / 0;
    INSERT INTO error_test VALUES ('EXIT');
END;
Copy
生成されたコード:

Snowflake

CREATE OR REPLACE PROCEDURE with_continueAndExit()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "db2",  "convertedOn": "01/15/2025" }}'
AS
$$
    DECLARE
        test_1 INTEGER DEFAULT 10;
    BEGIN
        test_1 := 1 / 0;
        INSERT INTO error_test VALUES ('EXIT');
        EXCEPTION
            WHEN OTHER CONTINUE THEN
                INSERT INTO error_test VALUES ('EXCEPTION')
        !!!RESOLVE EWI!!! /*** SSC-EWI-0114 - MIXED CONTINUE AND EXIT EXCEPTION HANDLERS IN THE SAME BLOCK ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        EXCEPTION
            WHEN OTHER EXIT THEN
                CASE
                    WHEN (SQLSTATE = '20000') THEN
                        INSERT INTO error_test VALUES ('ERROR 2000')
                END
    END;
$$;
Copy

ベストプラクティス

When dealing with mixed CONTINUE and EXIT handlers:

  1. Review Exception Handling Logic: Carefully review the converted code to understand how exceptions are handled in each block.

  2. Test Thoroughly: Test all error scenarios to ensure the behavior matches the source system's expectations.

  3. Consider Refactoring: If possible, refactor the code to use only one type of handler (either all CONTINUE or all EXIT) within a block.

  4. Use Nested Blocks: Consider restructuring the logic using nested BEGIN...END blocks, where each block has its own exception handling strategy.

  5. Document Behavior Changes: Document any differences in exception handling behavior for future maintenance.