SnowConvert: Oracleの問題

SSC-EWI-OR0001

説明

このエラーは、 START WITH ステートメントの値が LIMIT VALUE に設定されている場合に発生します。

Oracleでは、この句は ALTER TABLE ステートメントでのみ使用されます。

identity_options での使用可能な START WITH LIMIT VALUE オプションは、 ALTER TABLE MODIFY コマンドでのみ使用できます。START WITH LIMIT VALUE を使用すると、Oracleデータベースは次を実行します。

  1. テーブルをロックします

  2. いずれかを探します。

    • ID列の最大値(増加シーケンスの場合)

    • ID列の最小値(減少シーケンスの場合)

  3. この値をシーケンスジェネレーターのハイウォーターマークとして設定します

  4. 次のシーケンス値を以下で計算します

    • 増加シーケンスの場合: ハイウォーターマーク + INCREMENT BY 整数

    • 減少シーケンスの場合: ハイウォーターマーク - INCREMENT BY 整数

ALTER TABLE ORACLE

コード例

入力コード:

CREATE SEQUENCE SEQUENCE1
  START WITH LIMIT VALUE;
Copy

出力コード:

CREATE OR REPLACE SEQUENCE SEQUENCE1
  !!!RESOLVE EWI!!! /*** SSC-EWI-OR0001 - SEQUENCE START VALUE WITH 'LIMIT VALUE' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
  START WITH LIMIT VALUE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}';
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0050

重大性

説明

このエラーは、許容範囲を超える値をキャストしようとしたときに発生します。これは精度値がSnowflakeでサポートされていないことを意味し、コードがコメントアウトされ、このメッセージが追加されます。

コード例:

入力コード:

SELECT CAST('123,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12.34567891234567891234567891234567891267+' AS NUMBER, '99.999999999999999999999999999999999999S') FROM DUAL;
SELECT CAST('12.34567891234567891234567891234567891267' AS NUMBER, '99.999999999999999999999999999999999999') FROM DUAL;
select cast(' 1.0E+123' as number, '9.9EEEE') from dual;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '123,456E+40' ***/!!!
 CAST('123,456E+40' AS NUMBER(38, 18) , '999,999EEE') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '12.34567891234567891234567891234567891267+' ***/!!! CAST('12.34567891234567891234567891234567891267+' AS NUMBER(38, 18) , '99.999999999999999999999999999999999999S') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '12.34567891234567891234567891234567891267' ***/!!! CAST('12.34567891234567891234567891234567891267' AS NUMBER(38, 18) , '99.999999999999999999999999999999999999') FROM DUAL;

select
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE ' 1.0E+123' ***/!!! cast(' 1.0E+123' as NUMBER(38, 18) , '9.9EEEE') from dual;
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0110

分かりやすくするため、コードの一部を削除しています。

重大度

説明

SnowflakeのSnowScript言語には、 FOR UPDATE 句に直接相当するものはありません。ツールは変換中にエラー、警告、情報(EWI)メッセージを追加し、この句をコメントアウトします。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE for_update_clause
AS
    update_record f_employee%rowtype;
    CURSOR c1 IS SELECT * FROM f_employee FOR UPDATE OF employee_number nowait;
BEGIN
    FOR CREC IN C1 LOOP
	UPDATE f_employee SET employee_number = employee_number + 1000 WHERE CURRENT OF c1;
	IF crec.id = 2 THEN
	    DELETE FROM f_employee WHERE CURRENT OF c1;
	    EXIT;
	END IF;
    END LOOP;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE for_update_clause ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		update_record OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
		c1 CURSOR
		FOR
			SELECT * FROM
				f_employee
			!!!RESOLVE EWI!!! /*** SSC-EWI-OR0110 - FOR UPDATE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
			FOR UPDATE OF employee_number nowait;
	BEGIN
		OPEN C1;
		--** SSC-PRF-0004 - THIS STATEMENT HAS USAGES OF CURSOR FOR LOOP **
		FOR CREC IN C1 DO
			!!!RESOLVE EWI!!! /*** SSC-EWI-OR0136 - CURRENT OF CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
			UPDATE f_employee
				SET employee_number =
 				                     !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! employee_number + 1000 WHERE CURRENT OF c1;
			IF (crec.id = 2) THEN
--				!!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'CURRENT OF' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--				DELETE FROM
--					f_employee
--				WHERE CURRENT OF c1
				                   ;
				EXIT;
			END IF;
		END FOR;
		CLOSE C1;
	END;
$$;
Copy

推奨事項

  • UPDATE/DELETE クエリで列の更新を処理します。詳細情報については、エラーコード SSC-EWI-0075 をご参照ください。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0035

分かりやすくするため、出力コードの一部を削除しています。

重大性

説明

Snowflakeで式のコレクションを作成しようとする場合は、 TABLE 関数を使用できません。この関数は現在サポートされていません。

コード例

入力コード:

SELECT
TABLE2.COLUMN_VALUES
FROM TABLE1 i, TABLE(i.groups) TABLE2;
Copy

出力コード:

// SnowConvert Helpers Code section is omitted.
SELECT
TABLE2.COLUMN_VALUES
FROM
TABLE1 i,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0035 - TABLE FUNCTION IS NOT SUPPORTED WHEN IT IS USED AS A COLLECTION OF EXPRESSIONS ***/!!! TABLE(i.groups) TABLE2;
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0097

重大性

説明

Oracleの CREATE PROCEDURE ステートメント内の追加プロパティは、Snowflakeの CREATE PROCEDURE 構文ではサポートされていないため、移行時に安全に省略することができます。

コード例

入力コードOracle:

CREATE OR REPLACE PROCEDURE PROC01
DEFAULT COLLATION USING_NLS_COMP
AUTHID CURRENT_USER
ACCESSIBLE BY (PROCEDURE PROC03)
AS
BEGIN
    NULL;
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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0097 - PROCEDURE PROPERTIES ARE NOT SUPPORTED IN SNOWFLAKE PROCEDURES ***/!!!
AS
$$
    BEGIN
        NULL;
    END;
$$;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0087

重大性

例を明確かつ簡潔にするため、コードの一部を省略しています。

説明

このエラーは、(+)演算子を使用するOracleの外側結合構文を ANSI JOIN 句に変換する際に問題があると発生します。具体的には、元のクエリが WHERE 句に循環的なテーブル参照を含んでおり、テーブルが循環パターンで結合されている場合に発生します。

この早期警告インジケーター(EWI)が表示された場合は、 JOIN 操作が正しい順序でないために失敗する可能性があります。

コード例

入力コードOracle:

SELECT
l.location_id, l.state_province,
r.region_id, r.region_name,
c.country_id, c.country_name
FROM
hr.countries c,  hr.regions r,  hr.locations l, hr.departments d WHERE
l.location_id (+) = c.region_id AND
c.region_id (+) = r.region_id AND
r.region_id (+) = c.region_id AND
l.location_id (+) = d.location_id;
Copy

出力コード:

SELECT
l.location_id, l.state_province,
r.region_id, r.region_name,
c.country_id, c.country_name
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0087 - ORDERING THE OUTER JOINS FAILED. QUERY MAY NOT BEHAVE CORRECTLY ***/!!!
hr.departments d
LEFT OUTER JOIN
hr.locations l
ON
l.location_id = c.region_id
AND
l.location_id = d.location_id
LEFT OUTER JOIN
hr.countries c
ON
c.region_id = r.region_id
LEFT OUTER JOIN
hr.regions r
ON
r.region_id = c.region_id;
Copy
  • クエリが構文的に正しいか、不必要にテーブルとテーブルを結合していないか検証します。

  • 問題が解決しない場合は、 WHERE 句で各列のテーブル名を指定します(例: column_name ではなく、 table1.column_name を使用する)。

  • その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0100

重大性

説明

Oracleの FOR LOOP は複数の条件を指定できますが、Snowflake Scriptingの FOR LOOP は単一の条件しかサポートしていません。OracleからSnowflakeに変換する場合は、最初の条件のみが移行され、それ以降の条件は無視されます。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE P3
AS
BEGIN
FOR i IN REVERSE 1..3,
REVERSE i+5..i+7
LOOP
    NULL;
END LOOP;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE P3 ()
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-OR0100 - FOR LOOP WITH MULTIPLE CONDITIONS IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR i IN REVERSE 1 TO 3 LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

推奨事項

  • 複雑な FOR LOOP ステートメントを複数の単純なループに分解するか、ループ条件を書き換えて明確にします。

  • その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0011

重大性

説明

SnowflakeのCast関数は、「MONTH」または「DAY」を DATE または TIMESTAMP 形式内で使用する場合の形式パラメーターをサポートしていません。

"MONTH/DD/YYYY" or "MM/DAY/YY" ...
Copy

Snowflakeにおいて NUMBER データ型で CAST 関数を使用する場合は、10進数の値を正しく表示するために4つの引数を指定する必要があります。現在、出力コードには TO_NUMBER 関数に必要な引数がすべて用意されていません。10進数の形式が正しくなるように、足りない引数を手動で追加する必要があります。

コード例

入力コード:

SELECT CAST('12.48' AS NUMBER, '99.99') FROM DUAL;
Copy

出力コード:

SELECT
TO_NUMBER('12.48', '99.99', 38, 2)
FROM DUAL;
Copy

入力コード:

SELECT CAST('FEBRUARY/18/24' as DATE, 'MONTH/DD/YY') FROM DUAL;
SELECT CAST('FEB/MON/24' as DATE, 'MON/DAY/YY') FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER 'MONTH/DD/YY' IS NOT SUPPORTED ***/!!!
TO_TIMESTAMP ('FEBRUARY/18/24' , 'MONTH/DD/YY')
FROM DUAL;

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER 'MON/DAY/YY' IS NOT SUPPORTED ***/!!!
TO_TIMESTAMP ('FEB/MON/24' , 'MON/DAY/YY')
FROM DUAL;
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0031

重大性

説明

このエラーは、 SYS_CONTEXT 関数でサポートされていないパラメーターを使用した場合に発生します。Snowflakeは同様のコンテキスト関数を提供しており、代わりに使用することができます。サポートされているコンテキスト関数の詳細情報については、 Snowflakeドキュメント をご参照ください。

コード例

入力コード:

SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0031 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE ***/!!!
 SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy

推奨事項

  • この関数はユーザー定義関数(UDF)テンプレートに変換され、 SYS_CONTEXT パラメーターの動作を再現するようにカスタマイズすることができます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0005

この早期警報インジケーター(EWI)は使用されなくなりました。最新のドキュメントについては、 SSC-FDM-OR0043 をご参照ください。

重大性

説明

このエラーは、 TO_CLOB 関数を TO_VARCHAR に変換する際に発生します。BFILE または BLOB パラメーターを扱う場合、適切に変換するために形式パラメーターを指定する必要がある場合があります。

コード例

入力コード:

SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0005 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED ***/!!!
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
Copy

推奨事項

  • 出力結果がソースコードと変換後のコードで一致していることを検証します。必要に応じて形式パラメーターを追加します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0104

重大性

説明

Oracleコレクションは現在、 SnowConvert でサポートされていません。コレクションタイプを使用する変数とそれに関連する操作は、変換後のコードでコメントアウトされます。

-t JavaScript フラグまたは --PLTargetLanguage JavaScript オプションをコマンドに追加して、 JavaScript でプロシージャとマクロを生成します。

コード例

入力コードOracle:

-- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE collection_variable_sample_proc
IS
    TYPE POPULATION IS TABLE OF NUMBER INDEX BY VARCHAR2(64); --Associative array
    city_population POPULATION := POPULATION();
    i  VARCHAR2(64);
BEGIN
	city_population('Smallville')  := 2000;
    city_population('Midland')     := 750000;

    i := city_population.FIRST;
    i := city_population.NEXT(1);
END;
Copy

出力コード

CREATE OR REPLACE PROCEDURE collection_variable_sample_proc ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
	// SnowConvert Helpers Code section is omitted.

	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0072 - PROCEDURAL MEMBER TYPE DEFINITION NOT SUPPORTED. ***/!!!
	/*     TYPE POPULATION IS TABLE OF NUMBER INDEX BY VARCHAR2(64) */
	;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/*     city_population POPULATION := POPULATION() */
	;
	let I;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/* 	city_population('Smallville')  := 2000 */
	;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/*     city_population('Midland')     := 750000 */
	;
	I =
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
		/*city_population.FIRST*/
		null;
	I =
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
		/*city_population.NEXT(1)*/
		null;
$$;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0070

重大性

例を明確で分かりやすくするため、コードの一部を削除しています。

説明

バイナリ操作は直接変換できません。これを解決するために、ユーザー定義関数を追加しました。

コード例

Oracle:

-- Unsupported operation: EXCEPT DISTINCT
SELECT someValue MULTISET EXCEPT DISTINCT multiset_except FROM customers_demo;
Copy

Snowflake Scripting:

-- Unsupported operation: EXCEPT DISTINCT
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0070 - BINARY OPERATION MULTISET EXCEPT IS NOT SUPPORTED ***/!!!
 someValue MULTISET EXCEPT DISTINCT multiset_except FROM
 customers_demo;
Copy

推奨事項

  • エンドユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0030

重大性

説明

このエラーは、集計関数を使用するときに最初または最後の値のみを選択するために使用される KEEP FIRST 句または KEEP LAST 句が現在サポートされていないことを示しています。

コード例

入力コード:

SELECT
    department_id,
    MIN(salary) KEEP (
        DENSE_RANK FIRST
        ORDER BY
            commission_pct
    ) "Worst"
FROM
    employees;
Copy

出力コード:

SELECT
    department_id,
    MIN(salary)
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0030 - KEEP STATEMENT USED IN THE AGGREGATE FUNCTION IS NOT SUPPORTED ***/!!!
 KEEP (
        DENSE_RANK FIRST
        ORDER BY
            commission_pct
    ) "Worst"
FROM
 employees;
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0121

重大性

説明

Oracle BFILE 列をSnowflakeに移行する場合は、ファイル名を文字列として格納する VARCHAR 列に変換されます。つまり、これらの移行された列に対してSnowflakeの SUBSTR 関数を使用すると、ファイルのコンテンツではなくファイル名そのものを操作することになります。これは、ファイルの実際のコンテンツを操作するOracleの DBMS_LOB.SUBSTR 関数とは異なります。詳細については、 BFILE データ型 をご参照ください。

コード例

入力コード:

CREATE TABLE table1
(
    bfile_column BFILE
)
SELECT
DBMS_LOB.SUBSTR(bfile_column, 15, 1)
FROM table1;
Copy

出力コード:

CREATE OR REPLACE TABLE table1
    (
        bfile_column
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
    VARCHAR
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
    ;
    SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0121 - USING DBMS_LOB.SUBSTR ON BFILE SOURCE COLUMN IS NOT SUPPORTED ON SNOWFLAKE ***/!!!
    SUBSTR(bfile_column, 1, 15)
    FROM
    table1;
Copy

推奨事項

  • ここ のドキュメントを参照して、Snowflakeでのファイルの扱い方を学んでください。

  • その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0092

重大性

説明

このメッセージは、丸めのために NUMBER データ型で負のスケールを使用しようとしたときに表示されます。Snowflakeは負のスケールをサポートしていないため、変換からスケールパラメーターが削除されています。

コード例

入力コードOracle:

CREATE TABLE number_table
(
	col1 NUMBER(38),
	col2 NUMBER(38, -1),
	col3 NUMBER(*, -2)
);

INSERT INTO number_table(col1, col2, col3) VALUES (555, 555, 555);

SELECT * FROM number_table;
Copy
COL1|COL2|COL3|
-+-+-+
 555| 560| 600|
Copy

出力コード:

CREATE OR REPLACE TABLE number_table
	(
		col1 NUMBER(38) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
		col2 NUMBER(38) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
		col3 NUMBER(38) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO number_table(col1, col2, col3) VALUES (555, 555, 555);

	SELECT * FROM
	number_table;
Copy
|COL1|COL2|COL3|
|-|-|-|
|555 |555 |555 |
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0004

例を明確で分かりやすくするため、コードの一部を削除しています。

説明

この警告は、 SELECT ステートメントにSnowflakeがサポートしていない句が含まれている場合に表示されます。以下の句はSnowflakeではサポートされていません。

  • データを格納するコンテナーオブジェクト

  • 情報整理のための階層的データ構造

  • データソースの外部変更

  • データパーティションまたはセグメント

コード例

入力コード:

SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Copy

出力コード:

SELECT * FROM
TABLE1
       !!!RESOLVE EWI!!! /*** SSC-EWI-OR0004 - THE 'OPTIONAL MODIFIED EXTERNAL' SYNTAX IN SELECT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
       EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0014

例を明解で分かりやすくするため、出力コードの一部を削除しています

重大性

説明

現時点では、 SELECT ステートメント内で NLSSORT 関数を使用することはできません。

コード例

入力コード:

SELECT NLSSORT(name, 'NLS_SORT = ENGLISH') FROM products;
Copy

出力コード:

// SnowConvert Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0014 - FUNCTION NLSSORT IS NOT SUPPORTED ***/!!!
 NLSSORT(name, 'NLS_SORT = ENGLISH') FROM
 products;
Copy

推奨事項

  • NLSSORT はユーザー定義関数(UDF/スタブ)に変換され、その動作を再現するようにカスタマイズすることができます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0105

重大性

説明

BFILE データ型は、移行時に VARCHAR に変換されます。この変換により、ファイルパスとファイル名の格納が可能になります。Oracleの組み込み関数は、 BFILE 型を扱うためのもので、現在はサポートされていません。ファイルパスとファイル名の扱いについての詳細については、 BFILENAME_UDF ドキュメントをご参照ください。

BUILD_STAGE_FILE_URL 関数は、Snowflakeステージに格納されたファイルにアクセスする安全な方法を提供します。呼び出されると、 ステージ 内の特定のファイルを指す URL を生成します。詳細については、関数のドキュメント ここ をご参照ください。

コード例

入力コードOracle:

CREATE TABLE bfiletable ( bfile_column BFILE );

INSERT INTO bfiletable VALUES ( BFILENAME('mydirectory', 'myfile.png') );
Copy

出力コード:

CREATE OR REPLACE TABLE bfiletable ( bfile_column
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

INSERT INTO bfiletable
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png') );
Copy

推奨事項

  • Snowflakeでファイルを管理操作するには、 BUILD_STAGE_FILE_URL 関数やその他の ファイル関数 を使用します。

CREATE OR REPLACE TABLE bfiletable ( bfile_column
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO bfiletable
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png') );
Copy
URL                                                                                                   |
+
https://thecompany.snowflakecomputing.com/api/files/CODETEST/PUBLIC/MY_STAGE/%2Fmydirectory%2Fmyfile.jpg|
Copy

この関数は様々なクラウドストレージプロバイダーに対応しています。ステージングされたローカルシステムからのファイルの使用に関する情報については、この ドキュメント をご参照ください。

  • データ型をターゲットシステムと互換性のあるものに変換します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0045

重大性

説明

このメッセージは、Snowflakeでは使用できない FML またはL形式のキャスティングを使用しようとすると表示されます。このような場合は、コードがコメントアウトされ、この警告メッセージが表示されます。

コード例:

入力コード:

SELECT CAST(' $123.45' as number, 'L999.99') FROM DUAL;
SELECT CAST('$123.45' as number, 'FML999.99') FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0045 - CAST TYPE L AND FML NOT SUPPORTED ***/!!!
 CAST(' $123.45' as NUMBER(38, 18) , 'L999.99') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0045 - CAST TYPE L AND FML NOT SUPPORTED ***/!!! CAST('$123.45' as NUMBER(38, 18) , 'FML999.99') FROM DUAL;
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0082

例を明解で分かりやすくするため、出力コードの一部を削除しています

重大性

説明

このエラーは、クエリがカスタムタイプとして定義された列内の属性にアクセスしようとすると発生します。自動変換はできませんが、これらのクエリを手動で簡単に変換することができます。

コード例:

入力コードOracle:

CREATE TYPE type1 AS OBJECT (
  attribute1 VARCHAR2(20),
  attribute2 NUMBER
);
CREATE TYPE type2 AS OBJECT (
  property1 type1,
  property2 DATE
);
CREATE TABLE my_table (
  id NUMBER PRIMARY KEY,
  column1 type2
);
INSERT INTO my_table VALUES (
  1, type2(type1('value1', 100), SYSDATE)
);
SELECT column1.property1.attribute1, column1.property2
FROM my_table;
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 (
  attribute1 VARCHAR2(20),
  attribute2 NUMBER
)
;

!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type2 AS OBJECT (
  property1 type1,
  property2 DATE
)
;

CREATE OR REPLACE TABLE my_table (
  id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/ PRIMARY KEY,
  column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'type2' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE VIEW PUBLIC.my_table_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
AS
SELECT
  id,
  column1:property1:attribute1 :: VARCHAR AS attribute1,
  column1:property1:attribute2 :: NUMBER AS attribute2,
  column1:property2 :: DATE AS property2
FROM
  my_table;

INSERT INTO my_table
VALUES (
  1, type2(type1('value1', 100) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'type1' NODE ***/!!!, CURRENT_TIMESTAMP()) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'type2' NODE ***/!!!
);

SELECT
  !!!RESOLVE EWI!!! /*** SSC-EWI-OR0082 - CANNOT CONVERT NESTED TYPE ATTRIBUTE EXPRESSION ***/!!! column1.property1.attribute1,
  column1.property2
FROM
  my_table;
Copy

推奨事項

  • 手動でコードを修正するには、タイプ列にアクセスする際に「.」(ドット)演算子を「:」(コロン)に置き換えます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0071

重大性

説明

Snowflakeでは、「ALL」量指定子の使用がサポートされていません。コードを変換する際、この修飾子は削除され、警告メッセージが生成されます。この変更によって、コードに予期せぬ動作が引き起こされる可能性があることに注意してください。

コード例

入力コード:

SELECT location_id  FROM locations
MINUS ALL
SELECT location_id  FROM departments;
Copy

出力コード:

SELECT location_id  FROM
locations
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0071 - QUANTIFIER 'ALL' NOT SUPPORTED FOR THIS SET OPERATOR, RESULTS MAY DIFFER ***/!!!
MINUS
SELECT location_id  FROM
departments;
Copy

Snowflakeでは、 INTERSECT および MINUS/EXCEPT 演算子は、結果セットから重複値を自動的に除去します。

推奨事項

Snowflakeで「ALL」量指定子の機能を再現する代替メソッドを確認します。MINUS ALLEXCEPT ALL 操作の制限を回避する方法をここにご紹介します。

SELECT location_id FROM
(
    SELECT location_id, ROW_NUMBER()OVER(PARTITION BY location_id ORDER BY 1) rn
    FROM locations
    MINUS
    SELECT number_val, ROW_NUMBER()OVER(PARTITION BY location_id ORDER BY 1) rn
    FROM departments
);
Copy

SSC-EWI-OR0020

重大性

中程度

説明

Snowflakeのこの関数の実装は負の値を受け付けないため、実行時にソースデータベースと異なる動作になります。

コード例

入力コード:

SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;
Copy

出力コード:

SELECT
REGEXP_INSTR('CORPORATE FLOOR','OR', -3, 2) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0020 - NEGATIVE VALUES NOT SUPPORTED FOR FUNCTION ***/!!! FROM DUAL;
Copy

推奨事項

  • 負の値を入力パラメーターとして処理できるユーザー定義関数(UDF)を作成するか、別の解決策を探ります。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0051

重大性

説明

この警告は、 PRAGMA EXCEPTION_INIT 関数がプロシージャ内で使用されている場合に表示されます。元のコードでは、例外名と SQL コードは RAISE 関数を使用して定義されています。Snowflake Scriptingに変換する際、これらの SQL コードは例外宣言に含まれます。ただし、これらの SQL コード値の中には、Snowflake Scriptingと互換性がないものもあります。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
  NEW_EXCEPTION EXCEPTION;
  PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
  NEW_EXCEPTION2 EXCEPTION;
  PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
BEGIN

  IF true THEN
    RAISE NEW_EXCEPTION;
  END IF;

EXCEPTION
    WHEN NEW_EXCEPTION THEN
        --Handle Exceptions
        NULL;
END;
/
Copy

出力コード:

Snowflakeスクリプト

CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE ()
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-OR0099 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS ***/!!!
    NEW_EXCEPTION EXCEPTION;
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
    PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
    NEW_EXCEPTION2 EXCEPTION (-20100, '');
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
  PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
  BEGIN
    IF (true) THEN
      RAISE NEW_EXCEPTION;
    END IF;
    EXCEPTION
        WHEN NEW_EXCEPTION THEN
            --Handle Exceptions
            NULL;
    END;
$$;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0075

重大性

例を明確で分かりやすくするため、コードの一部を削除しています。

-t JavaScript または --PLTargetLanguage JavaScript のフラグをコマンドに追加して、 JavaScript にプロシージャとマクロを生成します。

説明

コードブロック内のラベルはステートメント内の参照として使用できません。

コード例

Oracle:

--Additional Params: -t JavaScript
CREATE OR REPLACE EDITIONABLE PROCEDURE PROCEDURE1
IS
BEGIN
    -- procedure body
    EXIT loop_b;
    -- procedure body continuation
END;
Copy

Snowflake Scripting:

--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE PROCEDURE1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    // SnowConvert Helpers Code section is omitted.

    /* ** SSC-EWI-OR0075 - LABELS IN STATEMENTS ARE NOT SUPPORTED. ** */
    /*     -- procedure body
        EXIT loop_b */
    // procedure body
    ;
    // procedure body continuation
    ;
$$;
Copy

推奨事項

  • エンドユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0135

重大性

説明

SnowflakeでTime Travelクエリを実行する際、データ保持期間外の時間を指定した場合、結果が得られないことがあります。詳細情報については、 SnowflakeのTime Travel をご参照ください。

コード例

入力コード

SELECT * FROM employees
AS OF TIMESTAMP
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE last_name = 'SampleName';
Copy

出力コード

SELECT * FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0135 - DATA RETENTION PERIOD MAY PRODUCE NO RESULTS ***/!!!
AT (TIMESTAMP =>
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS'))
WHERE last_name = 'SampleName';
Copy

推奨事項

SSC-EWI-OR0101

重大性

説明

Oracleの FOR LOOP は、Snowflake Scriptingでは利用できない追加句をサポートしています。これらには次が含まれます。

  • BY 句: ループカウンターのステップサイズを制御します

  • WHILE 句: ループを続けるためのブール条件を追加します

  • WHEN 句: ループを続けるためのブール条件を追加します

OracleコードをSnowflakeに変換する場合、これらの句はSnowflake Scriptingではサポートされていないため、無視されます。

コード例

入力コードOracle:

CREATE OR REPLACE PROCEDURE P2
AS
BEGIN
FOR i IN 1..10 WHILE i <= 5 LOOP
    NULL;
END LOOP;

FOR i IN 5..15 BY 5 LOOP
    NULL;
END LOOP;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE P2 ()
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-OR0101 - FOR LOOP WITH "WHILE" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR i IN 1 TO 10 LOOP
            NULL;
        END LOOP;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "BY" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR i IN 5 TO 15 LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

推奨事項

  • 複雑な FOR LOOP ステートメントを複数の単純なループに分解するか、ループ条件を書き換えて明確にします。

  • その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0010

例を明確で分かりやすくするため、コードの一部を削除しています。

重大性

Critical

説明

この警告は、クエリで PARTITION 句と SUBPARTITION 句が使用されている場合に表示されます。Snowflakeはデータのパーティショニングを自動的に管理するため、これらの句は必要ありません。

コード例

入力コード:

SELECT * FROM table1 PARTITION(col1);
Copy

出力コード:

SELECT * FROM
table1
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0010 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE. IT REQUIRES MANUAL FIX ***/!!!
        PARTITION(col1);
Copy

推奨事項

  • Snowflakeで同様の関数を実現するには、 WHERE 句を手動で追加して、特定のパーティション行をフィルターする必要があります。この回避策はクエリのパフォーマンスに影響を与える可能性があることに注意してください。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0099

重大性

説明

このエラーは、例外宣言の番号がSnowflake Scriptingの許容範囲外である場合に発生します。例外番号は-20000~-20999の整数にする必要があります。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE procedure_exception
IS
my_exception EXCEPTION;
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
    NULL;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE procedure_exception ()
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-OR0099 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS ***/!!!
        my_exception EXCEPTION;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
        PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
    BEGIN
        NULL;
    END;
$$;
Copy

推奨事項

  • 例外コードがSnowflake Scriptingの許容範囲内であることを検証します。範囲外の場合は、別の利用可能な例外番号を使用します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0089

この早期警報インジケーター(EWI)は使用されなくなりました。最新のドキュメントについては、 SSC-FDM-OR0044 をご参照ください。

重大性

説明

この警告は、Oracleの REGEXP_LIKE 関数を一致パラメーター(3番目のパラメーター)で使用した場合に表示されます。この警告は、Oracleの REGEXP_LIKE を置き換えるSnowflakeの REGEXP_LIKE_UDF 関数が、すべての一致パラメーター文字をサポートしていない可能性があることを示しています。その結果、Snowflakeのクエリ出力がOracleと異なる場合があります。

コード例

入力コードOracle:

SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')
ORDER BY last_name;
Copy

出力コード:

SELECT last_name
FROM
hr.employees
WHERE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0089 - REGEXP_LIKE_UDF MATCH PARAMETER MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE. ***/!!!
PUBLIC.REGEXP_LIKE_UDF(last_name, '([aeiou])\\1', 'i')
ORDER BY last_name;
Copy
  • REGEXP_LIKE 条件のユーザー定義関数にサポートされていない文字が含まれている場合は、正規表現を修正して、これらの文字を使用せずに同じマッチング動作を実現することを検討してください。サポートされていない文字については、 REGEXP_LIKE_UDF ドキュメントをご参照ください。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0128

例を明解で分かりやすくするため、出力コードの一部を削除しています

重大性

説明

このメッセージは、ブールカーソル属性がサポートされていないか、同等の関数がないため、 SnowScript で使用できないことを示しています。以下のテーブルは、 SnowScript で再現できるブールカーソル属性のリストです。

| Boolean Cursor Attribute | ステータス | | | - | | %FOUND | エミュレート可 | | %NOTFOUND | Can be emulated | | %ISOPEN | サポート外 |

コード例

入力コード:

CREATE OR REPLACE PROCEDURE cursor_attributes_proc
IS
    is_open_attr BOOLEAN;
    found_attr BOOLEAN;
    my_record table1%ROWTYPE;
    CURSOR my_cursor IS SELECT * FROM table1;
BEGIN
    OPEN my_cursor;
    LOOP
        FETCH my_cursor INTO my_record;
        EXIT WHEN my_cursor%NOTFOUND;
        is_open_attr := my_cursor%ISOPEN;
        found_attr := my_cursor%FOUND;
    END LOOP;
    CLOSE my_cursor;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE cursor_attributes_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        is_open_attr BOOLEAN;
        found_attr BOOLEAN;
        my_record OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
        my_cursor CURSOR
        FOR
            SELECT
                OBJECT_CONSTRUCT( *) sc_cursor_record FROM
                table1;
    BEGIN
        OPEN my_cursor;
        LOOP
            --** SSC-PRF-0003 - FETCH INSIDE A LOOP IS CONSIDERED A COMPLEX PATTERN, THIS COULD DEGRADE SNOWFLAKE PERFORMANCE. **
            FETCH my_cursor INTO
                :my_record;
            IF (my_record IS NULL) THEN
                EXIT;
            END IF;
            is_open_attr := null /*my_cursor%ISOPEN*/!!!RESOLVE EWI!!! /*** SSC-EWI-OR0128 - BOOLEAN CURSOR ATTRIBUTE %ISOPEN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!;
            found_attr := my_record IS NOT NULL;
        END LOOP;
        CLOSE my_cursor;
    END;
$$;
Copy

推奨事項

SSC-EWI-OR0068

重大性

説明

このエラーは、 START WITH 値がSnowflakeの最大許容値より大きい場合に発生します。Snowflakeのドキュメントによると、シーケンス開始値は64ビットの2の補数整数 -2^63 から 2^63-1 までの範囲内にする必要があります。具体的には、最大許容値は以下のとおりです。

  • 正の数: 9223372036854775807

  • 負の数: 9223372036854775808

コード例

入力コード:

CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
Copy
CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Copy

出力コード:

CREATE OR REPLACE SEQUENCE SEQUENCE1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0068 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. ***/!!!
START WITH 9223372036854775808
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
Copy
CREATE OR REPLACE SEQUENCE SEQUENCE2
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0068 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. ***/!!!
START WITH -9223372036854775809
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
Copy

推奨事項

  • シーケンスをリセットし、その使用方法を調整することをお勧めします。 NOTE: ターゲット列がこの値を格納するのに十分な容量を持っていることを確認してください。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0039

例を明解で分かりやすくするため、出力コードの一部を削除しています

重大性

説明

このメッセージは、 SnowConvert が NOCYCLE 句を含むクエリを検出した場合に表示されます。この句は現在Snowflakeではサポートされていません。

このステートメントは、再帰操作が発生したことを示します。

句の機能に関する追加情報については、 ドキュメント をご参照ください。

コード例

Connect By

入力コード:

CREATE OR REPLACE FORCE NONEDITIONABLE VIEW VIEW01 AS
SELECT
      UNIQUE A.*
FROM
      TABLITA A
WHERE
      A.X = A.C CONNECT BY NOCYCLE A.C = 0 START WITH A.B = 1
HAVING
      X = 1
GROUP BY
      A.C;
Copy

出力コード:

CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
SELECT DISTINCT
      A.*
FROM
      TABLITA A
WHERE
      A.X = A.C
GROUP BY
      A.C
HAVING
      X = 1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0039 - NOCYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
CONNECT BY
      A.C = 0 START WITH A.B = 1;
Copy

推奨事項

  • データ階層にサイクルが含まれている場合の、サイクルの扱い方についてはこちらの 記事 をご参照ください。

  • その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0029

説明

Snowflakeは「変換エラー時のデフォルト」機能をサポートしていません。

コード例

入力コード:

SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0029 - DEFAULT ON CONVERSION ERROR NOT SUPPORTED IN SNOWFLAKE ***/!!! TO_NUMBER('2,00') "Value" FROM DUAL;
Copy

推奨事項

  • ユーザー定義関数(UDF)を作成し、 ON CONVERSION ERROR を処理する際に、 DEFAULT の値の関数を再現することを検討してください。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0078

重大性

説明

SnowConvert は、Execute Immediateコマンドに含まれる動的 SQL ステートメントを解析できませんでした。

-t JavaScript フラグまたは --PLTargetLanguage JavaScript オプションをコマンドに追加して、 JavaScript でプロシージャとマクロを生成します。

コード例

Oracle:

--Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE PROC1 AS
BEGIN
    EXECUTE IMMEDIATE 'NOT A VALID SQL STATEMENT';
END;
Copy

Snowflake Scripting:

CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
    // SnowConvert Helpers Code section is omitted.

    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0078 - UNABLE TO PARSE DYNAMIC SQL STATEMENT ***/!!!
    /*EXEC(`NOT A VALID SQL STATEMENT`)*/
    ;
$$;
Copy

推奨事項

  • 動的 SQL ステートメントが正しい構文であることを検証します。

  • ステートメントがサポートされているかどうかを SnowConvert のドキュメントで確認します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0118

重大性

説明

Oracleには、Snowflakeがサポートしていない 組み込みビューとテーブル が含まれます。これらの要素をクエリやステートメントで使用すると、 SnowConvert でエラーメッセージが生成されます。

コード例

入力コード:

SELECT * FROM ALL_COL_COMMENTS;
SELECT * FROM (SELECT * FROM ALL_COL_COMMENTS);
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0118 - TRANSLATION FOR ORACLE BUILT-IN TABLE/VIEW 'ALL_COL_COMMENTS' IS NOT CURRENTLY SUPPORTED. ***/!!!
 * FROM
 ALL_COL_COMMENTS;

SELECT * FROM (SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0118 - TRANSLATION FOR ORACLE BUILT-IN TABLE/VIEW 'ALL_COL_COMMENTS' IS NOT CURRENTLY SUPPORTED. ***/!!! * FROM
ALL_COL_COMMENTS);
Copy

推奨事項

  • Oracle組み込みビューで通常見られる情報は、Snowflakeでは Information Schema を介するか、 SHOW コマンドを使用すると利用できます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0009

重大性

説明

JSON_TABLE 関数は、現在このバージョンではサポートされていません。

コード例

入力コード:

SELECT jt.phones
FROM j_purchaseorder,
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR2(100) FORMAT JSON PATH '$.Phone')) AS jt;
Copy

出力コード:

SELECT jt.phones
FROM
j_purchaseorder,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0009 - JSON_TABLE IS NOT SUPPORTED ***/!!!
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR(100) FORMAT JSON PATH '$.Phone')) AS jt;
Copy

推奨事項

  • Snowflakeの FLATTEN 関数を JSON_TABLE 機能の代替として使用します。

  • その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0108

例を明解で分かりやすくするため、出力コードの一部を削除しています

重大性

説明

カーソル、コレクション、記録、ユーザー定義型などのOracle変数タイプは、直接Snowflakeに変換することはできません。さらに、Snow Scriptingは現在、プレースホルダー、オブジェクト、出力パラメーターの変換をサポートしていません。

これらの変数をSnowflakeの 半構造化データ型 に変換すると解決できる場合があります。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE pinvalidassign(out_parameter   IN OUT NUMBER)
AS
record_variable       employees%ROWTYPE;

TYPE cursor_type IS REF CURSOR;
cursor1   cursor_type;
cursor2   SYS_REFCURSOR;

TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64);
collection_variable     collection_type;

BEGIN
--Record Example
  record_variable.last_name := 'Ortiz';

--Cursor Example
  cursor1 := cursor2;

--Collection
  collection_variable('Test') := 5;

--Out Parameter
  out_parameter := 123;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE pinvalidassign (out_parameter NUMBER(38, 18))
RETURNS VARIANT
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    record_variable OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL REF CURSOR TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!

--    TYPE cursor_type IS REF CURSOR;
    cursor1_res RESULTSET;
    cursor2_res RESULTSET;
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!

--    TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64);
    collection_variable VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'collection_type' USAGE CHANGED TO VARIANT ***/!!!;
  BEGIN
    --Record Example
    record_variable := OBJECT_INSERT(record_variable, 'LAST_NAME', 'Ortiz', true);

    --Cursor Example
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
      cursor1 := :cursor2;

    --Collection
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
      collection_variable('Test') := 5;
    --Out Parameter
    out_parameter := 123;
    RETURN out_parameter;
  END;
$$;
Copy

推奨事項

  • 変数のデータ型を変更するか、Snowflakeの 半構造化データ型 を使用して目的の動作を再現することを検討してください。

  • その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0008

重大性

説明

このエラーは、システムが認識できない日付形式に遭遇した場合に発生し、予期しない結果につながる可能性があります。

コード例

入力コード:

SELECT TO_CHAR(DATE '1998-12-25','iw-iyyy') FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0008 - UNKNOWN FORMAT, MAY HAVE UNEXPECTED BEHAVIOR ***/!!!
 TO_CHAR(DATE '1998-12-25','iw-iyyy'') FROM DUAL;
Copy

メモ: 日付形式「iw-iyyy」はサポートされていません。

推奨事項

  • サポートされているタイムスタンプ形式のリストについては、 ドキュメント をご参照ください。

  • その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0109

重大性

説明

Snowflake Scriptingは、 EXECUTE IMMEDIATE ステートメントの USING 句で引数として式を使用することをサポートしていません。

Snowflake Scriptingは変数式をサポートしています。下の例のように、手動で変数に割り当てると、式を置き換えることができます。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE expression_arguments
IS
  immediate_input INTEGER := 0;
BEGIN
  EXECUTE IMMEDIATE 'INSERT INTO immediate_table VALUES (:value)' USING immediate_input+1;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE expression_arguments ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    immediate_input INTEGER := 0;
  BEGIN
    !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE 'INSERT INTO immediate_table
VALUES (?)' USING (
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0109 - EXPRESSIONS AS ARGUMENTS OF USING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
    :immediate_input +1);
  END;
$$;
Copy

手動で移行されたExecute Immediateプロシージャ:

Oracleと同じ結果を維持しながらコンパイルエラーを解決するには、上記のプロシージャを使用します。

CREATE OR REPLACE PROCEDURE PUBLIC.expression_arguments ()
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
   DECLARE
      immediate_input INTEGER := 0;
      using_argument_variable INTEGER;
   BEGIN
      using_argument_variable := immediate_input+1;
      EXECUTE IMMEDIATE 'INSERT INTO PUBLIC.immediate_table VALUES (?)' USING (using_argument_variable );
   END;
$$;
Copy

推奨事項

  • プロシージャを手動で移行するには、変数を作成して式を割り当てます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0049

重大性

Critical

例を明確かつ簡潔にするため、コードの一部を省略しています。

説明

この警告はステートフルパッケージのサポートされていないメンバーを使用しようとしたときに表示されます。

この機能は将来のリリースで利用可能になる予定です。

コード例

入力コード:

CREATE OR REPLACE PACKAGE MY_PACKAGE
AS
    TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
END;
Copy

出力コード:

CREATE SCHEMA IF NOT EXISTS MY_PACKAGE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

!!!RESOLVE EWI!!! /*** SSC-EWI-OR0049 - PACKAGE TYPE DEFINITIONS in stateful package MY_PACKAGE are not supported yet ***/!!!
TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0129

重大性

例を分かりやすくするため、コード出力の一部を削除しています。

説明

この警告は、参照されている TYPE 属性が見つからないため、システムがアイテムのデータ型を決定できない場合に表示されます。このような場合、システムは自動的に VARIANT データ型をアイテムに割り当てます。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE procedure01
IS
var1 table01.col1%TYPE;
BEGIN
NULL;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE procedure01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-OR0129 - TYPE ATTRIBUTE 'table01.col1%TYPE' COULD NOT BE RESOLVED, SO IT WAS TRANSFORMED TO VARIANT ***/!!!;
BEGIN
NULL;
END;
$$;
Copy

推奨事項

  • 参照アイテムのデータ型を手動で検証し、それに応じて参照項目の TYPE 属性を更新します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0069

重大性

説明

Snowflakeはシーケンスの CURRVAL プロパティをサポートしていません。

コード例

Oracle:

select seq1.currval from dual;
Copy

Snowflake Scripting:

select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0069 - THE SEQUENCE CURRVAL PROPERTY IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
 seq1.currval from dual;
Copy

推奨事項

SSC-EWI-OR0038

重大性

説明

search_clause は、 SELECT ステートメントで行の順序を定義することにより、行の処理方法を制御します。この機能により、Oracleではデータをトラバースして返す方法を指定できますが、Snowflakeでは使用できません。

Oracleや類似のデータベースでは、 search_clause は、再帰クエリや共通テーブル式(CTEs)で階層データがどのように処理されるかを制御するのに役立ちます。search_clause で列を指定すると、深さ優先か幅優先のどちらかのトラバース方法を選択することができ、行の処理順序が決まります。

Snowflakeでは、 search_clause メッセージが生成され、その後削除されます。

コード例

入力コード:

WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(SELECT aValue from atable) SEARCH DEPTH FIRST BY hire_date SET order1 SELECT aValue from atable;
Copy

出力コード:

WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(
SELECT aValue from
atable
) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0038 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/!!!
SELECT aValue from
atable;
Copy

推奨

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0033

重大性

説明

PL/WITH 句内の SQL 変数宣言は現在サポートされていません。

コード例

入力コード:

WITH FUNCTION get_domain ( url VARCHAR2 ) RETURN VARCHAR2 IS pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
END; SELECT aValue from aTable;
Copy

出力コード:

// SnowConvert Helpers Code section is omitted.
WITH
     !!!RESOLVE EWI!!! /*** SSC-EWI-OR0033 - PLDECLARATION IN WITH NOT SUPPORTED ***/!!!
 FUNCTION get_domain ( url VARCHAR2 ) RETURN VARCHAR2 IS pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
END; SELECT aValue from
aTable;
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0007

説明

このメッセージは、SnowflakeがサポートしていないCreate Typeステートメントを使用しようとしたときに表示されます。

コード例

入力コード(Oracle):

CREATE TYPE type6 UNDER type5(COL1 INTEGER);
Copy

出力コード:

--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
                                           ;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0116

重大性

例を分かりやすくするため、出力コードの一部を削除しています。

説明

このエラーは、区間だけを使用して算術演算を実行しようとすると発生します。Snowflakeは2つの区間値間の計算をサポートしていません。

コード例

入力コード:

SELECT INTERVAL '1-1' YEAR(2) TO MONTH + INTERVAL '1-1' YEAR(2) + INTERVAL '1-1' YEAR(2) TO MONTH FROM dual;

SELECT INTERVALCOLUMN + INTERVAL '1-1' YEAR(2) TO MONTH FROM INTERVALTABLE;
Copy

出力コード:

SELECT
--INTERVAL '1-1 year' + INTERVAL '1y, 1mm' + INTERVAL '1y, 1mm'
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0116 - OPERATIONS BETWEEN INTERVALS ARE NOT SUPPORTED BY SNOWFLAKE ***/!!!
null
FROM dual;


SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!! INTERVALCOLUMN + INTERVAL '1y, 1mm'
FROM
INTERVALTABLE;
Copy

推奨事項

  • 操作のタイミングに問題がある場合は、適切な場所に日付やタイムスタンプを追加することで修正できます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0046

この警告はもう使われていません。最新のドキュメントについては SSC-EWI-0109 をご参照ください。

重大性

説明

テーブル変更コマンドが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 ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **
ALTER TABLE SOMENAME
DEFAULT COLLATION SOMENAME;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
ROW ARCHIVAL;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
MODIFY CLUSTERING;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
DROP CLUSTERING;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
SHRINK SPACE COMPACT CASCADE;
Copy

推奨事項

  • ユーザー側からこれ以上のアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0023

重大性

例を明確で分かりやすくするため、コードの一部を削除しています。

説明

このエラーは、集計関数が使用されている場合に発生します。

  • DENSE_RANK(): パーティション内の各行に順位を割り当てます。同順位の場合は、順位シーケンスにギャップがありません。

  • RANK(): パーティション内の各行に順位を割り当てます。同順位の場合は、順位シーケンスにギャップがあります。

  • PERCENT_RANK(): パーティション内の行の相対順位をパーセント(0から1)で計算します。

  • CUME_DIST(): パーティション(0から1)内の値の累積分布を計算します。

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

コード例

入力コード:

SELECT DENSE_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT PERCENT_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT CUME_DIST(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - DENSE_RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
 DENSE_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - PERCENT_RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! PERCENT_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - CUME_DIST AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! CUME_DIST(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;
Copy

推奨事項

SSC-EWI-OR0072

重大性

例を明確で分かりやすくするため、コードの一部を削除しています。

-t JavaScript または --PLTargetLanguage JavaScript のフラグをコマンドに追加して、 JavaScript にプロシージャとマクロを生成します。

説明

このバージョンでは、プロシージャメンバーは現在サポートされていません。プロシージャメンバーとはどういう意味か、例を示します。

  • コードで定義されている定数

  • データ検索に使用されるデータベースカーソル

  • コンパイラーの動作を制御するPragmaステートメント

  • コード内で定義された変数

コード例

Oracle:

-- Additional Params: -t JavaScript
CREATE OR REPLACE EDITIONABLE PROCEDURE PROCEDURE1
   IS
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    NULL;
END;
Copy

Snowflake Scripting:

--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE PROCEDURE1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
   // SnowConvert Helpers Code section is omitted.

   !!!RESOLVE EWI!!! /*** SSC-EWI-OR0072 - PROCEDURAL MEMBER PRAGMA DECLARATION NOT SUPPORTED. ***/!!!
   /*    PRAGMA AUTONOMOUS_TRANSACTION */
   ;
   null;
$$;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0052

重大性

例を明確かつ簡潔にするため、コード出力の一部を削除しています。

-t JavaScript フラグまたは --PLTargetLanguage JavaScript オプションをコマンドに追加して、 JavaScript でプロシージャとマクロを生成します。

説明

例外はOracleとSnowflakeの両方に存在します。しかし、 RAISE 関数は、宣言、割り当て、エラーのスローという3つのタスクをすべて処理します。Exception宣言がコメントとして表示され、警告メッセージが表示されるのはこのためです。

コード例

入力コード:

-- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
  NEW_EXCEPTION EXCEPTION;
  PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
BEGIN

  IF true THEN
    RAISE NEW_EXCEPTION;
  END IF;

EXCEPTION
    WHEN NEW_EXCEPTION THEN
        --Handle Exceptions
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
  !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'PlInvokerRightsClause' NODE ***/!!!
  //AUTHID DEFINER
  null
  // SnowConvert Helpers Code section is omitted.

  try {
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0052 - EXCEPTION DECLARATION IS HANDLED BY RAISE FUNCTION ***/!!!
    /*   NEW_EXCEPTION EXCEPTION */
    ;
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
    /*   PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63) */
    ;
    if (true) {
      RAISE(-63,`NEW_EXCEPTION`,`NEW_EXCEPTION`);
    }
  } catch(error) {
    switch(error.name) {
      case `NEW_EXCEPTION`: {
        break;
      }
      default: {
        throw error;
        break;
      }
    }
  }
  //Handle Exceptions
  ;
$$;
Copy

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

推奨事項

SSC-EWI-OR0095

重大性

説明

データ型 INTERVAL YEAR TO MONTHINTERVAL DAY TO SECOND はサポートされていないため、 VARCHAR(20) に変換されます。その結果、 Date Types と、元々 Interval Type であった列との間で操作を実行することはできません。

さらに、IntervalタイプとDateタイプの間で(特にその順序で)操作を実行する場合、Snowflakeはこれらの操作をサポートしていないため、この EWI メッセージが生成されます。

コード例

入力コード:

CREATE TABLE table_with_intervals
(
    date_col DATE,
    time_col TIMESTAMP,
    intervalYearToMonth_col INTERVAL YEAR TO MONTH,
    intervalDayToSecond_col INTERVAL DAY TO SECOND
);

-- Date + Interval Y to M
SELECT date_col + intervalYearToMonth_col FROM table_with_intervals;

-- Date - Interval D to S
SELECT date_col - intervalDayToSecond_col FROM table_with_intervals;

-- Timestamp + Interval D to S
SELECT time_col + intervalDayToSecond_col FROM table_with_intervals;

-- Timestamp - Interval Y to M
SELECT time_col - intervalYearToMonth_col FROM table_with_intervals;
Copy

出力コード:

CREATE OR REPLACE TABLE table_with_intervals
    (
        date_col TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
        time_col TIMESTAMP(6),
        intervalYearToMonth_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR TO MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!,
        intervalDayToSecond_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO SECOND DATA TYPE CONVERTED TO VARCHAR ***/!!!
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;

    -- Date + Interval Y to M
    SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col + intervalYearToMonth_col FROM
    table_with_intervals;

    -- Date - Interval D to S
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col - intervalDayToSecond_col FROM
    table_with_intervals;

    -- Timestamp + Interval D to S
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col + intervalDayToSecond_col FROM
    table_with_intervals;

    -- Timestamp - Interval Y to M
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col - intervalYearToMonth_col FROM
    table_with_intervals;
Copy

推奨事項

  • Oracleの関数を再現するユーザー定義関数(UDF)を作成します。

  • 利用可能な場合は、Snowflake Interval Constant として、移行中に列に格納された変換値を使用します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0126

重大性

説明

このエラーは、システムに組み込まれているカスタム定義のデータ型を持つオブジェクトを使用しようとすると発生します。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE proc01 is
   var1 DBMS_SQL.VARCHAR2_TABLE;
   var2 CTX_CLS.DOC_TAB;
BEGIN
   varX := var1.property;
   varY := var2(1);
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
      var1 VARIANT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'DBMS_SQL.VARCHAR2_TABLE' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/;
      var2 VARIANT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'CTX_CLS.DOC_TAB' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/;
   BEGIN
      varX := var1.property !!!RESOLVE EWI!!! /*** SSC-EWI-OR0126 - UNUSABLE OBJECT var1, BUILT-IN CUSTOM TYPES ARE NOT SUPPORTED ***/!!!;
      varY := var2(1) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0126 - UNUSABLE OBJECT var2, BUILT-IN CUSTOM TYPES ARE NOT SUPPORTED ***/!!!;
   END;
$$;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0076

重大性

説明

組み込みパッケージの翻訳は現在利用できません。

コード例

入力コード(Oracle):

SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'UTL_RAW.CAST_TO_RAW' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS CAST_TO_RAW,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_UTILITY.GET_TIME' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS GET_TIME
FROM DUAL;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0136

重大性

Critical

説明

Snowflakeは現在、 UPDATE および DELETE ステートメントの WHERE 句内の CURRENT OF 句をサポートしていません。

コード例

Oracle:

CREATE OR REPLACE PROCEDURE proc_update_current_of
AS
  CURSOR C1
  IS
    SELECT * FROM F_EMPLOYEE FOR UPDATE OF SALARY nowait;
BEGIN
  FOR CREC IN C1
  LOOP
    UPDATE F_EMPLOYEE SET SALARY=SALARY+2000 WHERE CURRENT OF C1;
  END LOOP;
END;
Copy

Snowflake Scripting:

CREATE OR REPLACE PROCEDURE proc_update_current_of ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    C1 CURSOR
    FOR
      SELECT * FROM
        F_EMPLOYEE
      !!!RESOLVE EWI!!! /*** SSC-EWI-OR0110 - FOR UPDATE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
      FOR UPDATE OF SALARY nowait;
  BEGIN
      OPEN C1;
      --** SSC-PRF-0004 - THIS STATEMENT HAS USAGES OF CURSOR FOR LOOP **
      FOR CREC IN C1 DO
      !!!RESOLVE EWI!!! /*** SSC-EWI-OR0136 - CURRENT OF CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
      UPDATE F_EMPLOYEE
        SET SALARY=
                   !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!SALARY+2000 WHERE CURRENT OF C1;
      END FOR;
      CLOSE C1;
  END;
$$;
Copy

関連 EWI

  1. SSC-EWI-OR0036: 警告: 文字列と日付のデータ型間の算術演算は予期せぬ結果を引き起こす可能性があります。

  2. SSC-PRF-0004: このコードにはカーソルベースのループが含まれており、パフォーマンスに影響を与える可能性があります。

  3. SSC-EWI-OR0110: FOR UPDATE 句は現在Snowflakeではサポートされていません。

推奨事項

  • 標準の UPDATE または DELETE ステートメントを使用してクエリを書き換えます。WHERE 句に特定の列条件を含めます。テーブルに重複した記録がある場合、クエリがこれらの記録に複数回影響する可能性があることに注意してください。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0013

重大性

説明

NLS (各国語サポート)パラメーターは、現在以下の関数ではサポートされていません。

  • 値を文字列に変換する(TOCHAR)

  • 値を日付に変換する(TODATE)

  • 値を数値に変換する(TONUMBER)

  • 値をタイムスタンプに変換する(TOTIMESTAMP)

  • 値を指定したデータ型に変換する(CAST)

コード例

入力コード:

SELECT TO_NUMBER('-AusDollars100','9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''') "Amount" FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0013 - NLS PARAMETER ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''' NOT SUPPORTED ***/!!!
 TO_NUMBER('-AusDollars100','9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''') "Amount" FROM DUAL;
Copy

推奨事項

  • TO_NUMBER 関数はユーザー定義関数(UDF/スタブ)に変換され、特定のパラメーター要件に基づいて動作をカスタマイズできます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0042

例を明解で分かりやすくするため、出力コードの一部を削除しています

重大性

説明

このメッセージは、 SnowConvert が MODEL 句を含むクエリを検出した場合に表示されます。この句は現在Snowflakeではサポートされていません。

コード例

入力コード:

SELECT
   employee_id,
   salary
FROM
   employees
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
Copy

出力コード:

SELECT
   employee_id,
   salary
FROM
   employees
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0042 - MODEL CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
Copy

推奨事項

SSC-EWI-OR0053

重大性

説明

このエラーは、不正な入力形式を使用してデータをキャストしようとすると発生します。その結果、コードがコメントアウトされ、このメッセージが表示されます。

コード例:

入力コード:

SELECT CAST('12sdsd3,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12345sdsd' AS NUMBER, '99999') FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0053 - INCORRECT INPUT FORMAT '12sdsd3,456E+40' ***/!!!
 CAST('12sdsd3,456E+40' AS NUMBER(38, 18) , '999,999EEE') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0053 - INCORRECT INPUT FORMAT '12345sdsd' ***/!!! CAST('12345sdsd' AS NUMBER(38, 18) , '99999') FROM DUAL;
Copy

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0002

例を明解で分かりやすくするため、出力コードの一部を削除しています

重大性

説明

このエラーは、システムが選択式の列を解決できない場合に発生します。これは通常2つのシナリオで起こります。

  1. 解決されていないタイプアクセスを参照する場合

  2. 列定義がないユーザー定義タイプ(本文なしのタイプや空のオブジェクトタイプなど)から列にアクセスしようとすると、次のような問題が発生します。

コード例

入力コード:

CREATE OR REPLACE PROCEDURE record_unknown_table_proc
AS
    unknownTable_variable_rowtype unknownTable%ROWTYPE;
BEGIN
    INSERT INTO MyTable values unknownTable_variable_rowtype;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE record_unknown_table_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        unknownTable_variable_rowtype OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
    BEGIN
        INSERT INTO MyTable
        SELECT
            null !!!RESOLVE EWI!!! /*** SSC-EWI-OR0002 - COLUMNS FROM EXPRESSION unknownTable%ROWTYPE NOT FOUND ***/!!!;
    END;
$$;
Copy

推奨事項

  • 参照タイプ定義に列定義が含まれているかどうかをチェックします。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0036

重大性

説明

このエラーは、算術演算で互換性のない2つのデータ型が使用された場合に発生し、予期しない結果を招く可能性があります。

コード例

入力コード:

SELECT
    SYSDATE,
    SYSDATE + '1',
    SYSDATE + 'A'
from
    dual;
Copy

出力コード:

SELECT
    CURRENT_TIMESTAMP(),
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Date AND String ***/!!!
    CURRENT_TIMESTAMP() + '1',
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Date AND String ***/!!!
    CURRENT_TIMESTAMP() + 'A'
from
    dual;
Copy

文字列と日付のデータ型間で操作を実行する場合は、予期しない結果や不正確な結果が生じる可能性があることに注意してください。日付に関連する操作を行う前に、文字列を日付タイプに変換することをお勧めします。

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0067

重大性

中程度

例を明確かつ簡潔にするため、コードの一部を省略しています。

説明

Snowflakeでは、1つの ALTER TABLE ステートメントで複数の制約を定義することはできません。

コード例

Oracle:

ALTER TABLE TABLE1 ADD (
  CONSTRAINT TABLE1_PK
  PRIMARY KEY
  (ID)
  ENABLE VALIDATE,
  CONSTRAINT TABLE1_FK foreign key(ID2)
  references TABLE2 (ID) ON DELETE CASCADE);
Copy

Snowflake Scripting:

!!!RESOLVE EWI!!! /*** SSC-EWI-OR0067 - MULTIPLE CONSTRAINT DEFINITION IN A SINGLE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
ALTER TABLE TABLE1
ADD (
  CONSTRAINT TABLE1_PK
  PRIMARY KEY
  (ID) ,
  CONSTRAINT TABLE1_FK foreign key(ID2)
  references TABLE2 (ID) ON DELETE CASCADE);
Copy

推奨事項

  • エンドユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0026

例を明解で分かりやすくするため、出力コードの一部を削除しています

重大性

説明

このバージョンでは、 ROWID ステートメントは現在サポートされていません。

コード例

Oracle:

SELECT QUERY_NAME.ROWID from TABLE1;
Copy

Snowflake Scripting:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0026 - ROWID NOT SUPPORTED ***/!!!
 QUERY_NAME.ROWID from
 TABLE1;
Copy

推奨事項

SSC-EWI-OR0103

重大性

説明

Snowflake Scriptingでは、 FOR LOOP ステートメントのサポートがOracleに比べて制限されています。Oracleは複数の条件タイプ(ブール式、コレクション、記録など)をサポートしていますが、Snowflakeは整数範囲を境界とする FOR LOOP のみを許可します。それ以外のループ形式はサポート外としてマークされ、手動で変換する必要があります。

Snowflakeの FOR LOOP がサポートしていない Oracleの反復制御句:

  • single_expression_control: 単一式を評価します

  • values_of_control: コレクションから個々の値を処理します

  • indices_of_control: 配列のインデックスを繰り返します

  • pairs_of_control: コレクションからキーと値のペアを処理します

cursor_iteration_control 機能は現在サポートされていません。しかし、式から括弧を取り除くことで、 CURSOR FOR LOOP に変換できます。

FOR i IN (cursor_variable) LOOP NULL; END LOOP;

次のように変更:

FOR i IN cursor_variable LOOP NULL; END LOOP;

コード例

入力コードOracle:

CREATE OR REPLACE PROCEDURE P3
AS
TYPE values_aat IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
l_employee_values   values_aat;
BEGIN
FOR power IN REPEAT power*2 WHILE power <= 64 LOOP
    NULL;
END LOOP;

FOR i IN VALUES OF l_employee_values LOOP
    NULL;
END LOOP;
END;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE P3 ()
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-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--        TYPE values_aat IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
        l_employee_values VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'values_aat' USAGE CHANGED TO VARIANT ***/!!!;
    BEGIN
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0103 - FOR LOOP FORMAT IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "WHILE" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR power IN REPEAT power*2 WHILE power <= 64 LOOP
            NULL;
        END LOOP;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0103 - FOR LOOP FORMAT IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!

        FOR i IN VALUES OF :l_employee_values LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

推奨事項

  • FOR LOOP 条件を変更するか、別の LOOP タイプを選択して、同じ結果を得ます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0090

重大性

分かりやすくするため、コード出力の一部を削除しています。

説明

このエラーは、複数のテーブルを含む BETWEEN 句でOracle形式の OUTER JOIN と(+)演算子を使用した場合に発生します。Snowflakeはこの特定の構文の組み合わせをサポートしていません。この問題は、 BETWEEN 句が異なるテーブルの列を参照している場合に特に発生します。

コード例

入力コードOracle:

SELECT
*
FROM
hr.countries c, hr.regions r,  hr.locations l WHERE
l.location_id  BETWEEN r.region_id(+) AND c.region_id(+);
Copy

出力コード:

SELECT
*
FROM
hr.countries c,
hr.regions r,
hr.locations l WHERE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0090 - INVALID NON-ANSI OUTER JOIN BETWEEN PREDICATE CASE FOR SNOWFLAKE. ***/!!!
l.location_id  BETWEEN r.region_id(+) AND c.region_id(+);
Copy

推奨事項

  • 外側結合を ANSI 構文に手動で変換します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0123

重大性

説明

Snowflakeはデータベースリンクをサポートしていないため、オブジェクト名からデータベースリンク参照が削除されました。@ 記号の前にある名前の部分のみが保持されます。

コード例

入力コード:

-- Creation of the database link
CREATE DATABASE LINK mylink
    CONNECT TO user1 IDENTIFIED BY password1
    USING 'connection_str';

-- Statements that use the database link we created
SELECT * FROM employees@mylink;

INSERT INTO employees@mylink
    (employee_id, last_name, email, hire_date, job_id)
    VALUES (999, 'Claus', 'sclaus@oracle.com', SYSDATE, 'SH_CLERK');

UPDATE employees@mylink SET min_salary = 3000
    WHERE job_id = 'SH_CLERK';

DELETE FROM employees@mylink
    WHERE employee_id = 999;
Copy

出力コード:

- Creation of the database link
-** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE DATABASE LINK mylink
--    CONNECT TO user1 IDENTIFIED BY password1
--    USING 'connection_str'

    -- Statements that use the database link we created
SELECT * FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
    employees;

INSERT INTO
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
    (employee_id, last_name, email, hire_date, job_id)
    VALUES (999, 'Claus', 'sclaus@oracle.com', CURRENT_TIMESTAMP(), 'SH_CLERK');

UPDATE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
    SET min_salary = 3000
    WHERE job_id = 'SH_CLERK';

DELETE FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
    employees
    WHERE employee_id = 999;
Copy

推奨事項

  • すべてのデータベースリンクが一意の名前を持っていることを確認してください。複数のデータベースリンクが同じ名前を共有し、コードが複数回移行された場合、外部ウェブインターフェイス(EWI)では、どのデータベースリンクが最初に処理されたかに基づいて情報が正しく処理されないことがあります。

  • データベースリンクによって参照されるデータベースオブジェクトを、使用しているのと同じSnowflakeデータベースインスタンスに再配置します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0032

重大性

説明

このエラーは、サポートされていないパラメーターを関数内で使用しようとすると発生します。

コード例

入力コード:

SELECT TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0032 - PARAMETER USED IN THE FUNCTION 'TO_CHAR' WITH FORMAT AM IS NOT SUPPORTED ***/!!!
 TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
Copy

推奨事項

  • この関数はユーザー定義関数(UDF)テンプレートに変換され、パラメーターの動作に合わせてカスタマイズすることができます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0006

この早期警報インジケーター(EWI)は使用されなくなりました。最新の情報については、 SSC-FDM-OR0047 ドキュメントをご参照ください。

重大性

説明

TIMESTAMP_OUTPUT_FORMAT セッションパラメーターは、「DD-MON-YY HH24.MI.SS.FF AM TZH:TZM」のように設定し、タイムスタンプが正しい形式で表示され、システム間で等価性が保たれるようにする必要があります。

コード例

入力コード:

SELECT SYSTIMESTAMP FROM DUAL;
Copy

Oracleのデフォルト TIMESTAMP 出力の例

January 13, 2021 04:18:37.288656 PM UTC

出力コード:

SELECT
CURRENT_TIMESTAMP() !!!RESOLVE EWI!!! /*** SSC-EWI-OR0006 - YOU MAY NEED TO SET TIMESTAMP OUTPUT FORMAT ('DD-MON-YY HH24.MI.SS.FF AM TZH:TZM') ***/!!!
FROM DUAL;
Copy

Snowflakeのデフォルト TIMESTAMP 出力例

2021-01-13 08:18:19.720 -080

推奨事項

Snowflakeでのタイムスタンプの表示方法を変更するには、次のクエリを実行します。

ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'DD-MON-YY HH24.MI.SS.FF AM TZH:TZM';
Copy

SSC-EWI-OR0057

重大性

Critical

分かりやすくするため、コード出力の一部を削除しています。

説明

ネストされたプロシージャや関数(他のプロシージャや関数の中で定義されたプロシージャや関数)は、現時点では翻訳できません。この機能は将来のリリースで利用可能になる予定です。

コード例

入力コード:

CREATE OR REPLACE function FOO1 RETURN INTEGER AS
    FUNCTION FOO2 return integer;
    FUNCTION FOO2 RETURN INTEGER AS
    BEGIN
        RETURN 123;
    END;
BEGIN
    RETURN FOO2() + 456;
END;
Copy

出力コード:

--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
!!!RESOLVE EWI!!! /*** SSC-EWI-0046 - NESTED FUNCTION/PROCEDURE DECLARATIONS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE PROCEDURE FOO1 ()
RETURNS INTEGER
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-OR0057 - TRANSFORMATION FOR NESTED PROCEDURE OR FUNCTION IS NOT SUPPORTED ***/!!!
        FUNCTION FOO2 return integer;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED PROCEDURE OR FUNCTION IS NOT SUPPORTED ***/!!!
        FUNCTION FOO2 RETURN INTEGER AS
        BEGIN
           RETURN 123;
        END;
    BEGIN
        RETURN FOO2() + 456;
    END;
$$;
Copy

推奨事項

  • エンドユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0047

重大性

例を明確かつ簡潔にするため、コードの一部を省略しています。

説明

この警告は、移行プロセス中にOracleの TO_NCHAR 関数がSnowflakeの TO_VARCHAR 関数に変換された場合に表示されます。

コード変換の結果、コンパイルエラーが発生したり、オリジナルとは異なる予期せぬ出力が生成されたりする場合があります。

コード例

入力コード:

select TO_NCHAR(sysdate,'DY','nls_date_language=english') from dual
Copy

出力コード:

select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0047 - TO_NCHAR TRANSFORMED TO TO_VARCHAR, IT MAY NOT BE COMPILABLE IN SNOWFLAKE ***/!!!
TO_VARCHAR(CURRENT_TIMESTAMP(),'DY','nls_date_language=english') from dual;
Copy

先に示したコードをSnowflakeで実行するとエラーが発生します。

すべてのシナリオでエラーが発生するわけではありません。

入力コード:

SELECT TO_NCHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;
Copy

出力コード:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0047 - TO_NCHAR TRANSFORMED TO TO_VARCHAR, IT MAY NOT BE COMPILABLE IN SNOWFLAKE ***/!!!
TO_VARCHAR(CURRENT_TIMESTAMP(), 'YYYY-MM-DD') FROM dual;
Copy

最後の例はSnowflakeで正常に実行され、実行時に同じ出力を生成します。

推奨事項

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-EWI-OR0016

重大性

説明

以下にリストされた XML 関数は現在サポートされていません。

  • XML ドキュメントからデータを取得する EXTRACT 関数

  • XML 要素から特定の値を取得する EXTRACTVALUE

  • XML データを表形式に変換する XMLSEQUENCE

  • XML のコンテンツを格納するためにデータ型を定義する XMLTYPE

コード例

入力コード:

select * from table(XMLSequence(XMLType('
<Product ProductCode="200">
 <BrandName>Notebook</BrandName>
 <ProductList>
  <Item ItemNo="200A"><Price>900</Price></Item>
  <Item ItemNo="200B"><Price>700</Price></Item>
  <Item ItemNo="200C"><Price>650</Price></Item>
  <Item ItemNo="200D"><<Price>750</Price></Item>
</ProductList>
</Product>')));
Copy

出力コード:

select * from table(
                    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!
XMLSequence(
            !!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!XMLType('
<Product ProductCode="200">
 <BrandName>Notebook</BrandName>
 <ProductList>
  <Item ItemNo="200A"><Price>900</Price></Item>
  <Item ItemNo="200B"><Price>700</Price></Item>
  <Item ItemNo="200C"><Price>650</Price></Item>
  <Item ItemNo="200D"><<Price>750</Price></Item>
</ProductList>
</Product>')));
Copy

推奨事項

SSC-EWI-OR0133

重大性

説明

OPEN FOR ステートメントを変換する場合は、 SC により、元のカーソル変数と同じ名前のカーソル割り当てが、その動作を再現する追加ステートメントと共に作成されます。しかし、元のコードが同じカーソル変数を使用する複数の OPEN FOR ステートメントを含んでいる場合、変換されたコードは同じ名前の複数のカーソル割り当てを持つことになります。これはSnowflakeのコンパイルエラーになります。

コード例

入力コード

CREATE OR REPLACE PROCEDURE open_for_procedure
AS
	query1 VARCHAR(200) := 'SELECT 123 FROM dual';
	query2 VARCHAR(200) := 'SELECT 456 FROM dual';
	my_cursor_variable SYS_REFCURSOR;
BEGIN
	OPEN my_cursor_variable FOR query1;
	OPEN my_cursor_variable FOR query2;
END;
Copy

出力コード

CREATE OR REPLACE PROCEDURE open_for_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		query1 VARCHAR(200) := 'SELECT 123 FROM dual';
		query2 VARCHAR(200) := 'SELECT 456 FROM dual';
		my_cursor_variable_res RESULTSET;
	BEGIN
		!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
		my_cursor_variable_res := (
			EXECUTE IMMEDIATE :query1
		);
		LET my_cursor_variable CURSOR
		FOR
			my_cursor_variable_res;
		OPEN my_cursor_variable;
		!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
		my_cursor_variable_res := (
			EXECUTE IMMEDIATE :query2
		);
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0133 - THE CURSOR VARIABLE NAMED 'my_cursor_variable' HAS ALREADY BEEN ASSIGNED IN ANOTHER CURSOR ***/!!!
		LET my_cursor_variable CURSOR
		FOR
			my_cursor_variable_res;
		OPEN my_cursor_variable;
	END;
$$;
Copy

関連 EWI

  1. SSC-EWI-0030: 次のステートメントで動的 SQL が検出されました。

推奨事項

  • 出力コードのコンパイルエラーを修正するには、 SSC-EWI-OR0133 警告メッセージを表示するカーソル割り当ての名前を変更します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください