SnowConvert AI - Oracleの機能の違い

SSC-FDM-OR0001

注釈

このFDMは、Oracle SnowConvert AIの古いバージョン用に追加されたものです。現在は非推奨です。

説明

This error is related to the Assessment report file. It appears when an error occurs while writing the assessment details report file.

ベストプラクティス

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 doesn't support the versioning of objects. The modifier EDITIONABLE or NONEDITIONABLE is removed in the converted code and a warning is added.

コード例

入力コード:
 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暗黙カーソル値は異なる可能性があります。

説明

注釈

Generate Procedures and Macros using JavaScript as the target language adding the following flag -t JavaScript or --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

もうひとつ重要な考慮事項があります。

  1. スケール Y は、小数点の右側の最大桁数を指定します。

  2. スケール精度 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|

ベストプラクティス

SSC-FDM-OR0011

「スタックに追加」オプションがサポートされていないため、boolean引数は削除されました。

説明

This warning is displayed when the third optional argument of RAISE_APPLICATION_ERROR was removed during the migration. This functionality is not supported by 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

The cycle clause is not supported in 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;

ベストプラクティス

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;

ベストプラクティス

  • You may need to set the TIMEZONE session parameter to get equal results.

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

SSC-FDM-OR0018

Merge statement may not work as expected

説明

この警告は、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 -> 36.7 -> 74.5 -> 5

ただし、上限は最も近い下限の整数に切り捨てられます。 例:

3.1 -> 36.7 -> 64.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

  1. 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を作成して DEFAULT value ON 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
                                ;

ベストプラクティス

SSC-FDM-OR0030

ROWID疑似列はSnowflakeではサポートされていません。

説明

When ROWID is used as a pseudocolumn in a query it is transformed to null to avoid runtime errors and the EWI is added. There is still no transformation to emulate the functionality.

コード例

入力コード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で異なる結果を生成する場合に使用されます。

注釈

When the algorithm parameter is a dynamic expression (not a string literal), the function cannot be converted and SSC-EWI-OR0138 is emitted instead.

コード例

入力コード:
クエリ
 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 の場合に表示されます。

In Oracle this clause is used only in ALTER TABLE

  • START WITH LIMIT VALUEidentity_options 固有のものであり、 ALTER TABLE MODIFY とともにのみ使用できます。START WITH LIMIT VALUE を指定すると、Oracle Databaseはテーブルをロックし、テーブル内のID列の最大値(シーケンスが増加する場合)またはID列の最小値(シーケンスが減少する場合)を検出して、その値をシーケンスジェネレーターのハイウォーターマークとして割り当てます。シーケンスジェネレーターが次に返す値は、増加シーケンスではハイウォーターマーク+ INCREMENT BY 整数 、減少シーケンスではハイウォーターマーク- INCREMENT BY 整数 となります。

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;
$$;

ベストプラクティス

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でその機能をエミュレートする変換が存在しないことを示すために使用されます。以下の表は、エミュレート可能なブールのカーソル属性を示しています。

ブールカーソル属性

ステータス

%FOUND

エミュレート可

%NOTFOUND

エミュレート可

%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;
生成されたコード:
 --** 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;
$$;

ベストプラクティス

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;
  • When the REGEXP_LIKEcondition comes with one of the characters that are not supported by the user-defined function, maybe a possible solution is to change the regular expression to simulate the behavior of the missing character in the match parameter. To know more about the character not supported go to REGEXP_LIKE_UDF documentation.

  • さらにサポートが必要な場合は、 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-OR0048

Date or timestamp output format has to be set

説明

When SnowConvert AI transforms a DATE or TIMESTAMP to VARCHAR (for example, in a DEFAULT clause using SYSDATE or TRUNC(CURRENT_DATE())), the output depends on the OUTPUT_FORMAT and TIMESTAMP_OUTPUT_FORMAT session parameters. These may not match Oracle's default format. Set the session parameters to match the Oracle values for equivalent output.

コード例

入力コード:
 CREATE TABLE orders (
   order_id INT,
   created_date VARCHAR(30) DEFAULT TO_CHAR(TRUNC(SYSDATE))
);
生成されたコード:
 CREATE OR REPLACE TABLE orders (
   order_id INT,
   created_date VARCHAR(30) DEFAULT TO_VARCHAR(TRUNC(CURRENT_TIMESTAMP(), 'DD')) /*** SSC-FDM-OR0048 - TRANSFORMATION OF DATE/TIMESTAMP TO VARCHAR DEPENDS ON THE OUTPUT_FORMAT SESSION PARAMETERS, SET THEM TO MATCH THE ORACLE VALUES ***/
);

ベストプラクティス

  • Set TIMESTAMP_OUTPUT_FORMAT and OUTPUT_FORMAT session parameters to match Oracle's NLS format (e.g., '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;
$$;

ベストプラクティス