SnowConvert AI - Oracleの機能の違い¶
SSC-FDM-OR0001¶
注釈
このFDMは、Oracle SnowConvert AIの古いバージョン用に追加されたものです。現在は非推奨です。
説明¶
このエラーは 評価 レポートファイルに関するものです。評価詳細レポートファイルの書き込みエラーが発生した場合に表示されます。
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0002¶
シーケンス開始値がSnowflakeで許容される最大値を超えています。
注釈
このFDMは非推奨です。 SSC-EWI-OR0068 をご参照ください。
説明¶
このエラーは、 START WITH ステートメントの値がSnowflakeで許容される最大値を超えた場合に表示されます。開始値についてSnowflakeのメッセージは次の通りです。シーケンスが返す最初の値を指定します。サポートされる値は、64ビットの2の補数整数(-2^63 から 2^63-1 まで)で表すことができる値です。つまり、前述の内容に基づくと、許容される最大値は、正の数の場合は 9223372036854775807 、負の数の場合は 9223372036854775808 となります。
コード例¶
入力コード:¶
CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
生成されたコード:¶
CREATE OR REPLACE SEQUENCE SEQUENCE1
--** SSC-FDM-OR0002 - 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"}}';
CREATE OR REPLACE SEQUENCE SEQUENCE2
--** SSC-FDM-OR0002 - 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"}}';
ベストプラクティス¶
シーケンスをリセットし、その使用法も変更することをお勧めします。 NOTE :ターゲット列には、この値を保持するのに十分なスペースが必要です。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0003¶
with要素文から検索句が削除されました。
注釈
このFDMは非推奨です。 SSC-EWI-OR0038 をご参照ください。
説明¶
search_clause は、SELECTステートメントで行を処理する順序を定義するために使用されます。この機能により、カスタマイズされたデータのトラバーサルが可能になり、指定された条件に基づいて特定の順序で結果が返されるようになります。しかし、 search_clause によって特徴付けられるこの動作は、Snowflakeではサポートされていないことに注意することが重要です。
Oracleのようなデータベースでは、 search_clause は、再帰クエリや共通テーブル式(CTEs)と組み合わせて、階層データを探索する順序に影響を与えるためによく使用されます。search_clause の中で特定の列または列のセットを指定することで、階層の深さ優先または幅優先のトラバーサルを制御し、行の処理順序に影響を与えることができます。
Snowflakeでは、 search_clause メッセージが生成され、その後、 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;
生成されたコード:¶
WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(
SELECT aValue from
atable
) /*** SSC-FDM-OR0003 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/
SELECT aValue from
atable;
推奨¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0004¶
Snowflakeがサポートしていないため、order by句からsiblingsキーワードが削除されました。
説明¶
Oracleでは、 ORDER BY SIBLINGS 句を階層クエリで使用することで、階層で指定されたデータの順序を保持しながら、同じ階層で兄弟となる値の並べ替えを行うことができます。これはSnowflakeではサポートされていません。
コード例¶
入力コード:¶
SELECT LEVEL,
LPAD(' ', 2 * (LEVEL - 1)) || NAME AS FORMATTED_NAME,
JOB_TITLE
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID
ORDER SIBLINGS BY NAME;
生成されたコード:¶
SELECT LEVEL,
NVL(
LPAD(' ', 2 * (
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!LEVEL - 1)) :: STRING, '') || NVL(NAME :: STRING, '') AS FORMATTED_NAME,
JOB_TITLE
FROM
EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY
PRIOR EMPLOYEE_ID = MANAGER_ID
ORDER BY
NAME /*** SSC-FDM-OR0004 - SIBLINGS KEYWORD REMOVED FROM ORDER BY CLAUSE BECAUSE SNOWFLAKE DOES NOT SUPPORT IT ***/;
SIBLINGS句で達成される順序とまったく同じ順序にはアクセスできないかもしれませんが、同様の結果を得るための代替手段はいくつかあります。
ORDER BYを使って、目的のソートを適用する外側のクエリにクエリを組み込みます。CONNECT BYを使用した階層クエリでCTEを作成し、後続のクエリでCTEを参照し、ORDER BYを適用して兄弟ソート(同じレベルの行)を行います。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0005¶
同義語はSnowflakeではサポートされていませんが、この同義語への参照は元のオブジェクト名で変更されました。
説明¶
同義語はSnowflakeではサポートされていません。同義語は元の名前に置き換えられます。
コード例¶
入力コード:¶
CREATE TABLE TABLE1
(
COLUMN1 NUMBER
);
CREATE OR REPLACE SYNONYM B.TABLE1_SYNONYM FOR TABLE1;
SELECT * FROM B.TABLE1_SYNONYM WHERE B.TABLE1_SYNONYM.COLUMN1 = 20;
生成されたコード:¶
CREATE OR REPLACE TABLE TABLE1
(
COLUMN1 NUMBER(38, 18) /*** 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"}}'
;
-- --** SSC-FDM-OR0005 - SYNONYMS NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS SYNONYM WERE CHANGED BY THE ORIGINAL OBJECT NAME. **
-- CREATE OR REPLACE SYNONYM B.TABLE1_SYNONYM FOR TABLE1
;
SELECT * FROM
TABLE1
WHERE
TABLE1.COLUMN1 = 20;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0006¶
NULLではないインライン制約から制約状態が削除されました。
説明¶
この警告は、not null列制約が列インライン定義の一部として以下のOracle制約状態のいずれかを含んでいる場合に発生します。
[ RELY | NORELY | RELY DISABLE | RELY ENABLE | VALIDATE | NOVALIDATE ]
Snowflakeはこれらの状態をサポートしていないため、 NOT NULL インライン制約から削除されます。
コード例¶
入力コード:¶
CREATE TABLE Table1(
col1 INT NOT NULL RELY
);
生成されたコード:¶
CREATE OR REPLACE TABLE Table1 (
col1 INT NOT NULL /*** SSC-FDM-OR0006 - CONSTRAINT STATE RELY REMOVED FROM NOT NULL INLINE CONSTRAINT ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0007¶
Snowflakeはオブジェクトのバージョン管理をサポートしていません。開発者は、コードのバージョニングのための別のアプローチを検討する必要があります。
説明¶
Snowflakeはオブジェクトのバージョニングをサポートしていません。変換後のコードでは、修飾子EDITINONABLEまたはNONEDITIONABLEが削除され、警告が追加されます。
コード例¶
入力コード:¶
CREATE OR REPLACE EDITIONABLE PROCEDURE FUN1 (n number)is
l_result number;
begin
DELETE FROM employees;
end;
生成されたコード:¶
--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE FUN1 (n 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
$$
DECLARE
l_result NUMBER(38, 18);
BEGIN
DELETE FROM
employees;
END;
$$;
ベストプラクティス¶
ユーザーはコードのバージョニングのための別のアプローチを検討する必要があります。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0008¶
設定された量指定子はサポートされていません
注釈
このFDMは非推奨です。 SSC-EWI-OR0071 をご参照ください。
説明¶
量指定子「all」はSnowflakeではサポートされていません。この修飾子はソースコードから削除され、警告が追加されます。結果のコードは予期せぬ動作をする場合があります。
コード例¶
入力コード:¶
SELECT location_id FROM locations
MINUS ALL
SELECT location_id FROM departments;
生成されたコード:¶
SELECT location_id FROM
locations
--** SSC-FDM-OR0008 - QUANTIFIER 'ALL' NOT SUPPORTED FOR THIS SET OPERATOR, RESULTS MAY DIFFER **
MINUS
SELECT location_id FROM
departments;
Snowflakeでは、 INTERSECT および MINUS/EXCEPT 演算子は常に重複値を削除します。
ベストプラクティス¶
「all」量指定子の機能をエミュレートするために、Snowflakeでの代替案をチェックしてください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0009¶
SQL暗黙カーソル値は異なる可能性があります。
説明¶
注釈
JavasScriptをターゲット言語としてプロシージャとマクロを生成し、フラグ -t JavaScript または --PLTargetLanguage JavaScript を追加します。
注釈
わかりやすくするため、出力コードの一部を省略しています。
このEWIは、SQL暗黙カーソル値が使用されている場合に表示されます。これは、Oracleがクエリのタイプによって異なる値を使用するためです。例えば、 SELECT の場合、SQL暗黙カーソル値を設定するために使用される値は、クエリによって返される行の数です。クエリタイプが UPDATE/CREATE/DELETE/INSERT の場合、使用される値は影響を受ける行の数であり、これがこのEWIが表示される主な理由です。
コード例¶
入力コード:¶
-- Additional Params: -t JavaScript
--Transformation for implicit cursor
CREATE OR REPLACE PROCEDURE SP_SAMPLE AUTHID DEFINER IS
stmt_no POSITIVE;
BEGIN
IF SQL%ROWCOUNT = 0 THEN
EXIT ;
END IF;
IF SQL%ISOPEN THEN
EXIT ;
END IF;
IF SQL%FOUND THEN
EXIT ;
END IF;
IF SQL%NOTFOUND THEN
EXIT ;
END IF;
END;
生成されたコード:¶
-- Additional Params: -t JavaScript
--Transformation for implicit cursor
CREATE OR REPLACE PROCEDURE SP_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 AI Helpers Code section is omitted.
let STMT_NO = new POSITIVE();
if (SQL.ROWCOUNT /*** SSC-FDM-OR0009 - SQL IMPLICIT CURSOR VALUES MAY DIFFER ***/ == 0) {
break;
}
if (SQL.ISOPEN) {
break;
}
if (SQL.FOUND) {
break;
}
if (SQL.NOTFOUND) {
break;
}
$$;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0010¶
NUMBERデータ型の低い精度をスケールに合わせて高くしました。
説明¶
NUMBER データ型は固定小数点数と浮動小数点数を格納します。このデータは、Oracle Databaseが稼動している異なるオペレーティングシステム間で移植可能です。NUMBER データ型は、数値データを保存しなければならないほとんどの場合に推奨されます。構文は以下の NUMBER (X, Y) で、 X は精度、 Y はスケールです。
例えば、 NUMBER(5, 3) は、小数の前に 2 桁、小数の後に 3 桁を持つ数字で、ちょうど次のようなものです。
12.345
もうひとつ重要な考慮事項があります。
スケール Y は、小数点の右側の最大桁数を指定します。
スケール精度 Y-X は、小数点以下のゼロの最小の数を指定します。
このメッセージは、 NUMBER の精度がスケールより小さい場合に表示されます。Snowflakeはこの機能をサポートしていないため、このメッセージは等価性を維持するために精度の値が増加したことを示すために使用されます。
注意
この問題は、他の既知の変換と一緒に積み重なるか、まったく起こらないケースがあることを考慮してください。例えば、スケールが19で置き換えられ、以前の精度が19より大きい場合、このメッセージは表示されません。null
コード例¶
入力コード:¶
クエリ¶
CREATE TABLE SampleNumberTable(Col1 NUMBER(4, 5));
INSERT INTO SampleNumberTable (Col1)
VALUES (0.00009);
INSERT INTO SampleNumberTable (Col1)
VALUES (0.000021);
INSERT INTO SampleNumberTable (Col1)
VALUES (0.012678912);
SELECT * FROM SampleNumberTable;
結果¶
Col1 |
-------+
0.00009|
0.00002|
0.01268|
生成されたコード:¶
クエリ¶
CREATE OR REPLACE TABLE SampleNumberTable (Col1 NUMBER(5, 5) /*** SSC-FDM-OR0010 - NUMBER DATATYPE SMALLER PRECISION WAS INCREASED TO MATCH SCALE ***/ /*** 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 SampleNumberTable(Col1)
VALUES (0.00009);
INSERT INTO SampleNumberTable(Col1)
VALUES (0.000021);
INSERT INTO SampleNumberTable(Col1)
VALUES (0.012678912);
SELECT * FROM
SampleNumberTable;
結果¶
Col1 |
-------+
0.00009|
0.00002|
0.01268|
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0011¶
「スタックに追加」オプションがサポートされていないため、boolean引数は削除されました。
説明¶
この警告は、 RAISE_APLICATION_ERROR のオプションの3番目の引数が移行中に削除された場合に表示されます。この機能はSnowflakeではサポートされていません。
コード例¶
入力コード:¶
CREATE OR REPLACE FUNCTION TEST(SAMPLE_A IN NUMBER DEFAULT NULL,
SAMPLE_B IN NUMBER DEFAULT NULL)
RETURN NUMBER
AS
BEGIN
raise_application_error(-20001, 'First exception message', FALSE);
RETURN 1;
END TEST;
生成されたコード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE TEST (SAMPLE_A NUMBER(38, 18) DEFAULT NULL,
SAMPLE_B NUMBER(38, 18) DEFAULT NULL)
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
FIRST_EXCEPTION_MESSAGE_EXCEPTION_CODE_0 EXCEPTION (-20001, 'FIRST EXCEPTION MESSAGE');
BEGIN
--** SSC-FDM-OR0011 - ADD TO STACK OF ERRORS IS NOT SUPPORTED, BOOLEAN ARGUMENT FALSE WAS REMOVED. **
RAISE FIRST_EXCEPTION_MESSAGE_EXCEPTION_CODE_0;
RETURN 1;
END;
$$;
ベストプラクティス¶
エンドユーザーの操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0012¶
COMMITおよびROLLBACKステートメントを意図したとおりに実行するには、十分なセットアップが必要です。
説明¶
COMMITおよびROLLBACKステートメントをSnowflakeで意図したとおりに実行するには、十分なセットアップが必要です。これらのステートメントの正しい機能をシミュレートするには、Snowflakeで以下の命令を実行する必要があります。
ALTER SESSION SET AUTOCOMMIT = false;
コード例¶
入力コード¶
COMMIT;
ROLLBACK;
生成コード¶
--** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT;
--** SSC-FDM-OR0012 - ROLLBACK REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
ROLLBACK;
ベストプラクティス¶
コードの実行を開始する前に、説明セクションに記載されているクエリを実行してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0013¶
cycle句はSnowflakeではサポートされていません。
注釈
このFDMは非推奨です。 SSC-EWI-OR0039 をご参照ください。
説明¶
このメッセージは、SnowConvert AIがCYCLE句を含むクエリを見つけたときに表示されます。これは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;
生成されたコード:¶
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
--** SSC-FDM-OR0013 - CYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE **
CONNECT BY
A.C = 0 START WITH A.B = 1;
ベストプラクティス¶
データ階層にサイクルがある場合は、この 記事 を見て対処することができます。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0014¶
外部キーデータ型の不一致。
説明¶
このエラーは、外部キーのデータ型に不一致がある場合に発生します。
コード例¶
入力コード:¶
CREATE TABLE "MyDb"."MyTable"
(
"COL1" NUMBER,
CONSTRAINT "PK" PRIMARY KEY ("COL1")
);
CREATE TABLE "MyDb"."MyTable1"
(
"COL1" NUMBER(*,0),
CONSTRAINT "FK1" FOREIGN KEY ("COL1") REFERENCES "MyDb"."MyTable" ("COL1")
);
生成されたコード:¶
CREATE OR REPLACE TABLE "MyDb"."MyTable"
(
"COL1" NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
CONSTRAINT "PK" PRIMARY KEY ("COL1")
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE TABLE "MyDb"."MyTable1"
(
"COL1" NUMBER(38) /*** 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"}}'
;
ALTER TABLE "MyDb"."MyTable1"
ADD
--** SSC-FDM-OR0014 - FOREIGN KEY DATA TYPE MISMATCH **
CONSTRAINT "FK1" FOREIGN KEY ("COL1") REFERENCES "MyDb"."MyTable" ("COL1");
注釈
"MyDb"."MyTable1".COL1および"MyDb"."MyTable".COL1は異なる型であり、ERRORが表示されます。
ベストプラクティス¶
データ階層にサイクルがある場合は、この 記事 を見て対処することができます。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0015¶
DBMSのメモリ管理により、LENGTHBが変換されたOCTET_LENGTH結果は異なる場合があります。
説明¶
この問題は、列またはリテラルのサイズをバイト単位で返す LENGTHB 関数を呼び出した場合に発生します。この関数は、 OCTET_LENGTH Snowflake関数に変換されます。
関数のパラメーターが列の場合、結果は列が持つ値のサイズになります。このサイズはOracleとSnowflakeで異なる場合があり、列の型は関数が返す結果に重要な役割を果たします。
コード例¶
入力コード:¶
クエリ¶
CREATE TABLE char_table
(
char_column1 CHAR(15)
);
INSERT INTO char_table VALUES ('Hello world');
SELECT char_column1, LENGTHB(char_column1), LENGTH('Hello world') FROM char_table;
結果¶
|CHAR_COLUMN1 |LENGTHB(CHAR_COLUMN1)|LENGTH('HELLOWORLD')|
|---------------|---------------------|--------------------|
|Hello world |15 |11 |
生成されたコード:¶
クエリ¶
CREATE OR REPLACE TABLE char_table
(
char_column1 CHAR(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO char_table
VALUES ('Hello world');
SELECT char_column1,
OCTET_LENGTH(char_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/, LENGTH('Hello world') FROM
char_table;
結果¶
|CHAR_COLUMN1|OCTET_LENGTH(CHAR_COLUMN1)|LENGTH('HELLO WORLD')|
|------------|--------------------------|---------------------|
|Hello world |11 |11 |
ベストプラクティス¶
使用されているデータ型を手動でチェックしてください。
文字列がUnicodeコードポイントを含んでいる場合、OCTET_LENGTHがより大きなサイズを返すことがあるため、使用する列のエンコーディングを確認してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0016¶
COMMITおよびROLLBACKオプションは、Snowflakeでは必要ないため削除されました。
説明¶
COMMITおよびROLLBACKステートメントオプションは、Snowflakeが必要としないため、削除されました。
コード例¶
入力コード¶
COMMIT WORK FORCE '22.57.53';
ROLLBACK WORK FORCE '22.57.53';
生成コード¶
--** SSC-FDM-OR0016 - COMMIT OPTIONS REMOVED BECAUSE SNOWFLAKE DOES NOT REQUIRE THEM **
--** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT WORK;
--** SSC-FDM-OR0016 - ROLLBACK OPTIONS REMOVED BECAUSE SNOWFLAKE DOES NOT REQUIRE THEM **
--** SSC-FDM-OR0012 - ROLLBACK REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
ROLLBACK WORK;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0017¶
DBTimezoneが削除され、タイムスタンプのデフォルト値が使用されるようになりました。
説明¶
DBTIMEZONEキーワードはAT TIME ZONE式から削除されました。
コード例¶
入力コード:¶
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE DBTIMEZONE FROM DUAL;
生成されたコード:¶
SELECT
--** SSC-FDM-OR0017 - DBTIMEZONE WAS REMOVED TO USE THE DEFAULT VALUE OF THE TIMESTAMP **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
ベストプラクティス¶
同じ結果を得るためには、TIMEZONEセッションパラメーターを設定する必要があるかもしれません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0018¶
Mergeステートメントが期待通りに動作しない可能性があります
説明¶
この警告は、SnowflakeのMergeステートメントがOracleと比較していくつかの機能的な違いがある可能性があることを示すために使用されます。
コード例¶
入力コード:¶
MERGE INTO people_target pt
USING people_source ps
ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
DELETE where pt.title = 'Mrs.'
WHEN NOT MATCHED THEN INSERT
(pt.person_id, pt.first_name, pt.last_name, pt.title)
VALUES (ps.person_id, ps.first_name, ps.last_name, ps.title)
WHERE ps.title = 'Mr';
生成されたコード:¶
--** SSC-FDM-OR0018 - SNOWFLAKE MERGE STATEMENT MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE **
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "people_target", "people_source" **
MERGE INTO people_target pt
USING people_source ps
ON (pt.person_id = ps.person_id)
WHEN MATCHED AND pt.title = 'Mrs.' THEN
DELETE
WHEN MATCHED THEN
UPDATE SET
pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
WHEN NOT MATCHED AND ps.title = 'Mr' THEN
INSERT
(pt.person_id, pt.first_name, pt.last_name, pt.title)
VALUES (ps.person_id, ps.first_name, ps.last_name, ps.title);
ベストプラクティス¶
Oracleと比較して異なる結果が得られる場合は、以下を検討してください。
実行順の優先順位については、次の リンク で詳細をご確認ください。
スキップされたDMLステートメントをMergeステートメントの外側(状況に応じて前または後)で実行します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0019¶
ウィンドウフレーム出力が同等でない場合があります
説明¶
この警告は、ROWSウィンドウフレームユニットがソースコード内で見つかった場合に追加されます。
ROWSは、計算に物理的な行番号を使いますが、ターゲットプラットフォームに移行すると変わる可能性があります。手動でORDER BY句を追加することで、この問題を軽減または除去することができます。
注釈
Oracleドキュメント にあるように、「論理オフセットを持つ解析関数が返す値は常に決定論的である」ことに注意してください。しかし、物理的オフセットを持つ解析関数が返す値は、順序式が一意な順序にならない限り、非決定的な結果を生む可能性があります。この固有の順序付けを実現するには、 order_by_clause で複数の列を指定する必要がある可能性があります。
そのため、問題を避けるために、関数が決定論的な結果を返すかどうかを事前にチェックすることが推奨されます。
コード例¶
入力コード:¶
SELECT
SUM(C_BIRTH_DAY)
OVER (
ORDER BY C_BIRTH_COUNTRY
ROWS UNBOUNDED PRECEDING) AS MAX1
FROM WINDOW_TABLE;
生成されたコード:¶
SELECT
SUM(C_BIRTH_DAY)
OVER (
ORDER BY C_BIRTH_COUNTRY ROWS UNBOUNDED PRECEDING /*** SSC-FDM-OR0019 - WINDOW FRAME OUTPUT MAY NOT BE EQUIVALENT ***/) AS MAX1
FROM
WINDOW_TABLE;
ベストプラクティス¶
Snowflakeで実行する場合、決定論的な出力を保証するために、行の決定論的な順序を保証してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0020¶
PRAGMA EXCEPTION_INIT はサポートされていません。
注釈
このFDMは非推奨です。 SSC-EWI-OR0051 をご参照ください。
説明¶
この警告は、プロシージャ内でPRAGMA EXCEPTION_INIT関数が呼び出された場合に追加されます。例外の名前とSQLコードは、RAISE関数で設定されます。Snowflakeスクリプトに変換される際、SQLコードが例外宣言に追加されますが、一部のコード値はSnowflakeスクリプトでは無効となる場合があります。
コード例¶
入力コード:¶
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;
/
生成されたコード:¶
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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0097 - PROCEDURE PROPERTIES ARE NOT SUPPORTED IN SNOWFLAKE PROCEDURES ***/!!!
AS
$$
DECLARE
--** SSC-FDM-OR0023 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS **
NEW_EXCEPTION EXCEPTION;
--** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
NEW_EXCEPTION2 EXCEPTION (-20100, '');
--** SSC-FDM-OR0020 - 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;
$$;
ベストプラクティス¶
エンドユーザーによる操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0021¶
Snowflakeスクリプトで、浮動小数点数を境界とするFor Loopが正しく動作しない場合があります。
説明¶
Snowflakeスクリプトでは、 FOR LOOP 条件の境界として、 INTEGER または INTEGER と評価される式のみが許可されます。 浮動小数点数は切り上げまたは切り下げされ、元の境界を変更します。
下限値は最も近い整数に丸められます。 例:
3.1 -> 3、 6.7 -> 7、 4.5 -> 5
ただし、上限は最も近い下限の整数に切り捨てられます。 例:
3.1 -> 3、 6.7 -> 6、 4.5 -> 4
Snowflakeスクリプト¶
CREATE OR REPLACE PROCEDURE p1()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
DECLARE
var1 VARCHAR DEFAULT '';
var2 VARCHAR DEFAULT '';
var3 VARCHAR DEFAULT '';
BEGIN
--Loop 1
FOR i IN 1.2 TO 5.2 DO
var1 := var1 || ' ' || i::VARCHAR;
END FOR;
--Loop 2
FOR i IN 1.7 TO 5.5 DO
var2 := var2 || ' ' || i::VARCHAR;
END FOR;
--Loop 3
FOR i IN 1.5 TO 5.8 DO
var3 := var3 || ' ' || i::VARCHAR;
END FOR;
RETURN ' Loop1: ' || var1 ||
' Loop2: ' || var2 ||
' Loop3: ' || var3;
END;
$$;
CALL p1();
結果¶
P1 |
--------------------------------------------------+
Loop1: 1 2 3 4 5 |
Loop2: 2 3 4 5 |
Loop3: 2 3 4 5 |
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE p1
AS
BEGIN
FOR i NUMBER(5,1) IN 1.2 .. 5.7 LOOP
NULL;
END LOOP;
END;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE p1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-OR0021 - FOR LOOP WITH FLOAT NUMBER AS LOWER OR UPPER BOUND MAY NOT BEHAVE CORRECTLY IN SNOWFLAKE SCRIPTING **
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
FOR i IN 1.2 TO 5.7
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
LOOP
NULL;
END LOOP;
END;
$$;
ベストプラクティス¶
整数を使うように FOR LOOP 条件を書き換えてください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0022¶
複数の条件を含むForループは、現在Snowflakeスクリプトではサポートされていません。最初の条件のみ使用されています
注釈
このFDMは非推奨です。 SSC-EWI-OR0100 をご参照ください。
説明¶
Oracleでは、1 つの FOR LOOP で複数の条件を指定できますが、Snowflakeスクリプトでは、1つの FOR LOOP につき1つの条件しか指定できません。 最初の条件だけが移行され、他の条件は変換中に無視されます。
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE P3
AS
BEGIN
FOR i IN REVERSE 1..3,
REVERSE i+5..i+7
LOOP
NULL;
END LOOP;
END;
生成されたコード:¶
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
--** SSC-FDM-OR0022 - FOR LOOP WITH MULTIPLE CONDITIONS IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING **
FOR i IN REVERSE 1 TO 3 LOOP
NULL;
END LOOP;
END;
$$;
ベストプラクティス¶
FOR LOOPを別のループに分けるか、条件を書き換えてください。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0023¶
例外コードがSnowflakeスクリプトの制限を超えています。
注釈
このFDMは非推奨です。 SSC-EWI-OR0099 をご参照ください。
説明¶
この警告は、例外宣言エラーコードがSnowflakeスクリプトの例外番号の制限を超えた場合に表示されます。数値は-20000と-20999の間の整数でなければなりません。
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE procedure_exception
IS
my_exception EXCEPTION;
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
NULL;
END;
生成されたコード:¶
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
--** SSC-FDM-OR0023 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS **
my_exception EXCEPTION;
--** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
NULL;
END;
$$;
ベストプラクティス¶
例外コードがSnowflakeスクリプトで許可されている制限の範囲内であるかどうかを確認し、そうでない場合は利用可能な別の例外番号に変更してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0024¶
式の列が見つかりません
注釈
このFDMは非推奨です。 SSC-EWI-OR0002 をご参照ください。
説明¶
このエラーは、Select Expressionの列が解決できなかった場合に発生します。通常、参照が解決されなかったType Accessを参照しているか、列が定義されていないUser Defined Typeの列を参照している場合に発生します。例えば、列のないType Without BodyまたはObject Typeです。
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE record_unknown_table_proc
AS
unknownTable_variable_rowtype unknownTable%ROWTYPE;
BEGIN
INSERT INTO MyTable values unknownTable_variable_rowtype;
END;
生成されたコード:¶
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 /*** SSC-FDM-OR0024 - COLUMNS FROM EXPRESSION unknownTable%ROWTYPE NOT FOUND ***/;
END;
$$;
ベストプラクティス¶
参照された型定義がその中に列を持っていることを確認します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0025¶
Not Null制約はSnowflakeプロシージャではサポートされていません。
説明¶
Oracleの変数宣言 NOT NULL 制約は、Snowflakeのプロシージャ内の変数宣言ではサポートされていません。
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE PROC04
IS
var3 FLOAT NOT NULL := 100;
BEGIN
NULL;
END;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE PROC04 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var3 FLOAT := 100 /*** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE ***/;
BEGIN
NULL;
END;
$$;
ベストプラクティス¶
エンドユーザーによる操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0026¶
キャスト操作に対応していない型です。
注釈
このFDMは非推奨です。 SSC-EWI-OR0045 をご参照ください。
説明¶
このエラーは、ある型がキャスト操作でサポートされていない場合に発生します。
例¶
入力コード:¶
select cast(' $123.45' as number, 'L999.99') from dual;
生成されたコード:¶
select
--** SSC-FDM-OR0026 - CAST TYPE NOT SUPPORTED **
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER ' $123.45' IS NOT SUPPORTED ***/!!!
cast(' $123.45' as NUMBER(38, 18) , 'L999.99') from dual;
関連 EWIs¶
SSC-EWI-OR0011:フォーマットパラメーターはサポートされていません。
ベストプラクティス¶
キャストはユーザー定義関数(UDF/Stub)に変換されるので、キャスト関数の動作をエミュレートするように修正できます。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0027¶
DEFAULT ON CONVERSION ERRORはサポートされていません。
注釈
このFDMは非推奨です。 SSC-EWI-OR0029 をご参照ください。
説明¶
変換エラー時のデフォルトはSnowflakeではサポートされていません。
コード例¶
入力コード:¶
SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
生成されたコード:¶
SELECT
--** SSC-FDM-OR0027 - DEFAULT ON CONVERSION ERROR NOT SUPPORTED IN SNOWFLAKE IN SNOWFLAKE **
TO_NUMBER('2,00') "Value" FROM DUAL;
ベストプラクティス¶
UDFを作成して
DEFAULTvalueON CONVERSION ERRORの動作をエミュレートすることはできます。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0028¶
SYS_CONTEXTパラメーターはサポートされていません。
注釈
このFDMは非推奨です。SSC-EWI-OR0031のドキュメントをご参照ください。
説明¶
このエラーは、SYS_CONTEXT関数パラメータがサポートされていない場合に発生します。
コード例¶
入力コード:¶
SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
生成されたコード:¶
SELECT
--** SSC-FDM-OR0028 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE **
SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
ベストプラクティス¶
この関数はユーザー定義関数(スタブ)に変換されるので、SYS_CONTEXTパラメーターの動作をエミュレートするように変更できます。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0029¶
このALTER SESSION構成はSnowflakeではサポートされていません。
説明¶
現在、ALTER SESSIONステートメントの句または構成はサポートされていません。
コード例¶
入力コード:¶
ALTER SESSION SET SQL_TRACE TRUE;
生成されたコード:¶
----** SSC-FDM-OR0029 - THIS ALTER SESSION CONFIGURATION IS NOT SUPPORTED IN SNOWFLAKE **
--ALTER SESSION SET SQL_TRACE TRUE
;
ベストプラクティス¶
セッション変数については、Snowflake ドキュメント で同等のものを確認できます。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0030¶
ROWID疑似列はSnowflakeではサポートされていません。
説明¶
ROWIDがクエリで擬似列として使用されると、実行時エラーを避けるためにnullに変換され、EWIが追加されます。その機能をエミュレートする変換はまだありません。
コード例¶
入力コードOracle:¶
SELECT ROWID FROM T1;
生成されたコード:¶
SELECT
--** SSC-FDM-OR0030 - ROWID PSEUDOCOLUMN IS NOT SUPPORTED IN SNOWFLAKE, IT WAS CONVERTED TO NULL TO AVOID RUNTIME ERRORS **
'' AS ROWID
FROM
T1;
ベストプラクティス¶
エンドユーザーによる操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0031¶
DMLステートメント内のerror logging句は、Snowflakeではサポートされていません。
説明¶
このエラーは、OracleのDMLステートメントの error_logging句がSnowflakeのDMLステートメントでサポートされていないことを通知するために使用されます。
コード例¶
入力コード:¶
MERGE INTO people_target pt
USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
LOG ERRORS;
生成されたコード:¶
MERGE INTO people_target pt
USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN
UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
-- --** SSC-FDM-OR0031 - THE ERROR LOGGING CLAUSE IN DML STATEMENTS IS NOT SUPPORTED BY SNOWFLAKE **
--LOG ERRORS
;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0032¶
StandardHash関数に文字列以外のパラメーターを入力すると、Snowflakeでは異なる結果が生成されます。
説明¶
この警告は、文字列以外のパラメータを入力したOracleの STANDARD_HASH 関数が、Snowflakeで異なる結果を生成する場合に使用されます。
コード例¶
入力コード:¶
クエリ¶
SELECT STANDARD_HASH(1+1) FROM DUAL;
結果¶
STANDARD_HASH(1+1) |
--------------------------------------------------+
E39323970701D93598FC1D357F4BF04578CE3242 |
生成されたコード:¶
クエリ¶
SELECT
--** SSC-FDM-OR0032 - STANDARD HASH FUNCTION WITH INPUT NON-STRING PARAMETER GENERATES A DIFFERENT RESULT IN SNOWFLAKE **
SHA1(1+1)
FROM DUAL;
結果¶
SHA1(1+1) |
--------------------------------------------------+
da4b9237bacccdf19c0760cab7aec4a8359010b0 |
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0033¶
DBMS_RANDOM.VALUE組み込みパッケージの精度はSnowflakeで低くなります
説明
このメッセージは、SnowConvert AIがDBMS_RANDOM.VALUEOracle組み込みパッケージを移行するときに表示されます。この警告は、機能をエミュレートするために追加されたUDFが元の関数よりも精度が低いことを示しています。
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc
IS
var1 NUMBER;
BEGIN
SELECT DBMS_RANDOM.VALUE() INTO var1 FROM DUAL;
SELECT DBMS_RANDOM.VALUE(2,10) INTO var1 FROM DUAL;
END;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 NUMBER(38, 18);
BEGIN
SELECT
--** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
DBMS_RANDOM.VALUE_UDF() INTO
:var1
FROM DUAL;
SELECT
--** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
DBMS_RANDOM.VALUE_UDF(2,10) INTO
:var1
FROM DUAL;
END;
$$;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0034¶
'LIMIT VALUE' を含むシーケンス開始値は、Snowflakeではサポートされていません。
注釈
このFDMは非推奨です。 SSC-EWI-OR0001 をご参照ください。
説明¶
このエラーは、 START WITH ステートメントの値が LIMIT VALUE の場合に表示されます。
Oracleではこの句はALTER TABLEでのみ使用されます
STARTWITHLIMIT VALUEはidentity_options固有のものであり、ALTERTABLEMODIFYとともにのみ使用できます。STARTWITHLIMIT VALUEを指定すると、Oracle Databaseはテーブルをロックし、テーブル内のID列の最大値(シーケンスが増加する場合)またはID列の最小値(シーケンスが減少する場合)を検出して、その値をシーケンスジェネレーターのハイウォーターマークとして割り当てます。シーケンスジェネレーターが次に返す値は、増加シーケンスではハイウォーターマーク+INCREMENTBY整数、減少シーケンスではハイウォーターマーク-INCREMENTBY整数となります。
ALTER TABLE ORACLE¶
コード例¶
入力コード:¶
CREATE SEQUENCE SEQUENCE1
START WITH LIMIT VALUE;
生成されたコード:¶
CREATE OR REPLACE SEQUENCE SEQUENCE1
--** SSC-FDM-OR0034 - 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"}}';
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0035¶
DBMS_OUTPUT.PUTLINE、UDF実装を確認してください
説明¶
このメッセージは、SnowConvert AIが DBMS_OUTPUT.PUT_LINE Oracle組み込みパッケージを移行する際に表示されます。この警告は、追加されたUDを確認するように指示します。
このEWIは、 DBMS_OUTPUT.PUT_LINE_UDF の実装を確認するようユーザーに指示するために存在し、そこには以下の情報が記載されています。
警告
このUDFを使用すると、パフォーマンスに影響が出る場合があります。情報のログを開始したい場合は、実装のコメントを解除してください。セッション終了後もデータを保持したい場合は、CREATE TABLEからTEMPORARYを削除してください。
DBMS_OUTPUT.PUT_LINE_UDF の呼び出しが完了したら、以下のクエリですべてのログを読んでください。 SELECT * FROM DBMS_OUTPUT.DBMS_OUTPUT_LOG.
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE builtin_package_call
IS
BEGIN
DBMS_OUTPUT.PUT_LINE(1);
DBMS_OUTPUT.PUT_LINE("Test");
END;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE builtin_package_call ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF(1);
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF("Test");
END;
$$;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0036¶
不要な組み込みパッケージのパラメーター
説明¶
このメッセージは、SnowConvert AIがOracle組み込みパッケージのプロシージャまたは関数を移行し、引数の一部が呼び出しから削除された場合に表示されます。
元のパラメーターの中には、Snowflakeに同等のものがなかったり、変換後のバージョンでは必要なかったりするものがあります。そのようなパラメーターは生成されたコードからは削除されますが、EWIメッセージには保存されるため、ユーザーはそれらのパラメーターを追跡することができます。
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc
IS
w_file UTL_FILE.FILE_TYPE;
BEGIN
w_file:= UTL_FILE.FOPEN('MY_DIR','test.txt','W',32760);
UTL_FILE.PUT_LINE(w_file,'New line');
END;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
w_file OBJECT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'UTL_FILE.FILE_TYPE' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/ := OBJECT_CONSTRUCT();
BEGIN
--** SSC-FDM-OR0036 - PARAMETERS: 'LOCATION, MAX_LINESIZE_UDF' UNNECESSARY IN THE IMPLEMENTATION. **
CALL UTL_FILE.FOPEN_UDF('test.txt', 'W');
SELECT
*
INTO
w_file
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
--** SSC-FDM-OR0036 - PARAMETERS: 'AUTOFLUSH_UDF' UNNECESSARY IN THE IMPLEMENTATION. **
CALL UTL_FILE.PUT_LINE_UDF(:w_file, 'New line');
END;
$$;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0037¶
selectで使用されている構文は、Snowflakeではサポートされていません。
注釈
このFDMは非推奨です。 SSC-EWI-OR0004 をご参照ください。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
この警告は、selectの句がSnowflakeでサポートされていない場合に発生します。サポートされていない条項は以下の通りです。
CONTAINERS
SUBQUERY に RESTRICTION
HIERARCHIES
EXTERNAL に MODIFY
DBLINK
SHARDS
PARTITION
SUBPARTITION
HIERARCHICAL
コード例¶
入力コード:¶
SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
生成されたコード:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
SELECT * FROM
TABLE1
-- --** SSC-FDM-OR0037 - THE 'OPTIONAL MODIFIED EXTERNAL' SYNTAX IN SELECT IS NOT SUPPORTED IN SNOWFLAKE **
-- EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED)
;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0038¶
ブール値のカーソル属性はサポートされていません。
注釈
このFDMは非推奨です。 SSC-EWI-OR0128 をご参照ください。
説明¶
このメッセージは、ブールのカーソル属性がSnowScriptでサポートされていないこと、またはSnowScriptでその機能をエミュレートする変換が存在しないことを示すために使用されます。以下の表は、エミュレート可能なブールのカーソル属性を示しています。
ブールカーソル属性 |
ステータス |
|---|---|
|
エミュレート可 |
|
エミュレート可 |
|
サポート外 |
コード例¶
入力コード:¶
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;
生成されたコード:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
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*/ /*** SSC-FDM-OR0038 - BOOLEAN CURSOR ATTRIBUTE %ISOPEN IS NOT SUPPORTED IN SNOWFLAKE ***/;
found_attr := my_record IS NOT NULL;
END LOOP;
CLOSE my_cursor;
END;
$$;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0039¶
Create TypeはSnowflakeでサポートされていません
注釈
このFDMは非推奨です。 SSC-EWI-OR0007 をご参照ください。
説明¶
このメッセージは、SnowflakeがサポートしていないCreate Typeステートメントが使用された場合に追加されます。
コード例¶
入力コード(Oracle):¶
CREATE TYPE type6 UNDER type5(COL1 INTEGER);
生成されたコード:¶
----** SSC-FDM-OR0039 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE **
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
;
ベストプラクティス¶
エンドユーザーの操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0040¶
数値文字はSnowflakeでは変更できません。Snowflakeの小数点セパレーターはドット文字です。
説明¶
数値文字はSnowflakeでは変更できません。Snowflakeの小数点セパレーターはドット文字です。ALTERセッションステートメントがコメントされ、警告が追加されています。
コード例¶
Oracle:¶
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';
Snowflakeスクリプト:¶
----** SSC-FDM-OR0040 - NUMERIC CHARACTERS CANNOT BE ALTERED IN SNOWFLAKE. THE DECIMAL SEPARATOR IN SNOWFLAKE IS THE DOT CHARACTER. **
--ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.'
;
ベストプラクティス¶
エンドユーザーの操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0041¶
組み込みパッケージはサポート対象外です。
注釈
このFDM は非推奨です。 SSC-EWI-OR0076 を参照してください。
説明¶
組み込みパッケージの変換は現在サポートされていません。
コード例¶
入力コード(Oracle):¶
SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
生成されたコード:¶
SELECT
--** SSC-FDM-OR0041 - TRANSLATION FOR BUILT-IN PACKAGE 'UTL_RAW.CAST_TO_RAW' IS NOT CURRENTLY SUPPORTED. **
'' AS CAST_TO_RAW,
--** SSC-FDM-OR0041 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_UTILITY.GET_TIME' IS NOT CURRENTLY SUPPORTED. **
'' AS GET_TIME
FROM DUAL;
ベストプラクティス¶
エンドユーザーの操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0042¶
Timestamp に変換された Date 型の動作が異なる
説明¶
SnowflakeのDate型はOracleと動作が異なるため、Date型はフラグ --disableDateAsTimestamp に応じてDate型またはTimestamp型に変換されます。
主な相違¶
Oracle DATE |
Snowflake DATE |
|
|---|---|---|
機能性 |
日時情報を格納する |
日付情報(年、月、日)のみを格納する |
内部ストレージ |
エポックからの秒数を表すバイナリ数値 |
日付に最適化されたコンパクトな形式 |
ユースケース |
汎用日時ストレージ |
日付情報のみが必要なシナリオ |
メリット |
日付と時刻の両方をサポート |
より効率的な日付のストレージ |
制限事項 |
日付と時刻を別々に保存することはできない |
時刻情報を格納しない |
コード例¶
入力コード(Oracle):¶
CREATE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" DATE,
"UPDATED_DATE" DATE
);
生成されたコード:¶
CREATE OR REPLACE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
"UPDATED_DATE" 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"}}'
;
-- Additional Params: --disableDateAsTimestamp
CREATE OR REPLACE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" DATE /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
"UPDATED_DATE" DATE /*** 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"}}'
;
ベストプラクティス¶
エンドユーザーの操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0043¶
BFILE/BLOBパラメーターはバイナリとみなされます。フォーマットが必要な場合があります。
説明¶
このエラーは、TO_CLOB を TO_VARCHAR関数に変換したときに発生します。BFILE/BLOBパラメーターのフォーマットが必要かもしれません。
コード例¶
入力コード:¶
SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
生成されたコード:¶
SELECT
--** SSC-FDM-OR0043 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED. **
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
ベストプラクティス¶
入力コードと変換後のコードの出力が等価かどうかをチェックし、必要であればフォーマットパラメーターを追加します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0044¶
REGEXP_LIKE_UDF matchパラメーターが正しく動作しない可能性があります
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
この警告は、Oracleの REGEXP_LIKE 条件に3番目のパラメーター(matchパラメーター)が付属している場合に表示されます。警告を追加する理由は、 REGEXP_LIKE の置換に使用される REGEXP_LIKE_UDF がmatchパラメーターで使用されるすべての文字を認識しないため、Snowflakeでのクエリの結果がOracleと同等でない可能性があるためです。
コード例¶
入力コードOracle:¶
SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')
ORDER BY last_name;
生成されたコード:¶
SELECT last_name
FROM
hr.employees
WHERE
--** SSC-FDM-OR0044 - 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;
REGEXP_LIKE条件にユーザー定義関数でサポートされていない文字が含まれる場合、可能な解決策は、matchパラメーターに含まれない文字の動作をシミュレートするために、正規表現を変更することです。サポートされていない文字の詳細については、 REGEXP_LIKE_UDF ドキュメントをご参照ください。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0045¶
Partitions句はSnowflakeによって処理されています
注釈
このFDM は非推奨です。 SSC-EWI-OR0010 を参照してください。
説明¶
この警告は、 PARTITION 句と SUBPARTITION 句がクエリ内にある場合に表示されます。Snowflakeがパーティションを自動処理します
コード例¶
入力コード:¶
SELECT * FROM TABLITA PARTITION(col1);
生成されたコード:¶
SELECT * FROM
TABLITA
-- --** SSC-FDM-OR0045 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE **
-- PARTITION(col1)
;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0046¶
Snowflakeではサブクエリの制限ができません
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
この警告は、 SELECT ステートメントにサブクエリの制限がある場合に発生します。
コード例¶
入力コード:¶
SELECT * FROM LATERAL(SELECT * FROM TABLITA WITH READ ONLY CONSTRAINT T);
生成されたコード:¶
SELECT * FROM LATERAL(SELECT * FROM
TABLITA
-- --** SSC-FDM-OR0046 - THE SUBQUERY RESTRICTION IS NOT POSSIBLE IN SNOWFLAKE **
-- WITH READ ONLY CONSTRAINT T
);
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0047¶
TimeStampOutputフォーマットの設定が必要かもしれません。
説明¶
タイムスタンプ出力等価のためにTIMESTAMP_OUTPUT_FORMATセッションパラメーターを 'DD-MON-YY HH24.MI.SS.FF AM TZH:TZM' に設定する必要があるかもしれません。
コード例¶
入力コード:¶
SELECT SYSTIMESTAMP FROM DUAL;
OracleのデフォルトTIMESTAMP出力の例¶
出力
13-JAN-21 04.18.37.288656 PM +00:00
生成されたコード:¶
SELECT
CURRENT_TIMESTAMP() /*** SSC-FDM-OR0047 - YOU MAY NEED TO SET TIMESTAMP OUTPUT FORMAT ('DD-MON-YY HH24.MI.SS.FF AM TZH:TZM') ***/
FROM DUAL;
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';さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0049¶
LAG関数は、デフォルトの値の型が式の型と異なる場合に失敗する可能性があります。
説明¶
Oracleでは、 LAG 関数がデフォルト値のデータ型を式の型に合わせて自動的に変換します。しかし、Snowflakeはこの暗黙の変換を行いません。したがって、データ型に互換性がない場合、 LAG 関数が失敗する可能性があることを示す警告が発行されます。
コード例¶
入力コード:¶
SELECT
LAG(salary, 2, '0') OVER (ORDER BY salary) AS salary_two_steps_back
FROM
employees;
生成されたコード:¶
SELECT
--** SSC-FDM-OR0049 - LAG FUNCTION MIGHT FAIL IF DEFAULT VALUE TYPE DIFFERS FROM THE EXPRESSION TYPE. **
LAG(salary, 2, '0')
OVER (ORDER BY salary) AS salary_two_steps_back
FROM
employees;
ベストプラクティス¶
デフォルト値のデータ型が、
LAG関数の式のデータ型と一致していることを確認してください。両者が異なる場合は、デフォルト値を明示的に式のデータ型にキャストします。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-OR0050¶
NOCOPY パラメーターを持つ例外は、データの不整合を引き起こす可能性があります。
説明¶
OracleのPL/SQLでは、 NOCOPY キーワードは、 OUT および IN OUT プロシージャパラメーターの最適化ヒントです。デフォルトでは、Oracleはこれらのパラメーターを値で渡し、呼び出し中に高コストのデータのコピーを作成し、完了時にそれをコピーバックします。これは、大きなデータ構造に対して大きなパフォーマンスオーバーヘッドを引き起こす可能性があります。
NOCOPY はOracleに参照渡しを指示し、プロシージャが元のデータを直接変更できるようにします。これによりコピーのオーバーヘッドがなくなり、パフォーマンスが向上します。しかし、変更は即座に反映され、プロシージャ内で未処理の例外が発生しても暗黙のうちにロールバックされることはありません。
そこで、NOCOPYパラメーターオプションを削除し、次のFDMを追加します。これは、例外が発生するとプロシージャの実行が終了し、 RETURN ステートメントに到達できなくなるためです。その結果、呼び出し元の宣言ブロックの変数は、プロシージャが代入のための新しい値をうまく返せなかったため、初期値を保持します。
コード例¶
入力コード:¶
CREATE OR REPLACE PROCEDURE calculate_division_with_nocopy (
p_numerator IN NUMBER,
p_denominator IN NUMBER,
p_result OUT NOCOPY NUMBER
)
IS
PROCEDURE calculate_division(result OUT NOCOPY NUMBER)
AS
BEGIN
result := 20;
result := p_numerator / p_denominator;
END calculate_division;
BEGIN
calculate_division(p_result);
EXCEPTION
WHEN OTHERS THEN
p_result := p_result;
END calculate_division_with_nocopy;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE calculate_division_with_nocopy (p_numerator NUMBER(38, 18), p_denominator NUMBER(38, 18), 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/23/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
calculate_division PROCEDURE(result
--** SSC-FDM-OR0050 - EXCEPTIONS WITH NOCOPY PARAMETERS MAY LEAD TO DATA INCONSISTENCY. **
NUMBER(38, 18))
RETURNS NUMBER
AS
BEGIN
result := 20;
result := :p_numerator / :p_denominator;
RETURN result;
END;
call_results NUMBER;
BEGIN
call_results := (
CALL
calculate_division(:p_result)
);
p_result := :call_results;
EXCEPTION
WHEN OTHER THEN
p_result := :p_result;
END;
$$;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。