SnowConvert: Oracleの機能差

SSC-FDM-OR0001

注釈

この機能検出メカニズム(FDM)は廃止されています。Oracle SnowConvert の古いバージョン用に設計されたものです。

記述

このエラーは、評価レポートファイルの書き込みに問題がある場合に発生します。システムが評価の詳細を正しく保存または生成できません。

ベストプラクティス

SSC-FDM-OR0002

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0068 をご参照ください。

説明

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

  • 正の数: 9223372036854775807

  • 負の数: 9223372036854775808

コード例

入力コード:
 CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
Copy
 CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Copy
生成されたコード:
 CREATE OR REPLACE SEQUENCE SEQUENCE1
--** 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"}}';
Copy
 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"}}';
Copy

ベストプラクティス

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

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

SSC-FDM-OR0003

注釈

この FDM は廃止されました。詳細情報については、 SSC-EWI-OR0038 のドキュメントをご参照ください。

説明

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

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

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

コード例

入力コード:
 WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS 
(SELECT aValue from atable) SEARCH DEPTH FIRST BY hire_date SET order1 SELECT aValue from atable;
Copy
生成されたコード:
 WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(
SELECT aValue from
atable
) /*** SSC-FDM-OR0003 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/
SELECT aValue from
atable;
Copy

推奨

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

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

SSC-FDM-OR0004

説明

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;
Copy
生成されたコード:
 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 ***/;
Copy
  • SIBLINGS 句が提供する正確な順序は直接利用できませんが、これらの方法を使用して同様の結果を得ることができます。

    • クエリを別のクエリで囲み、 ORDER BY を使って結果を並べ替えます。

    • まず、 CONNECT BY を使用して、階層クエリを含む共通テーブル式(CTE)を作成します。次に、この CTE を参照する別のクエリを作成し、 ORDER BY を使用して兄弟(同じ階層レベルの行)を並べ替えます。

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

SSC-FDM-OR0005

説明

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

ベストプラクティス

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

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

SSC-FDM-OR0006

説明

この警告は、 NOT NULL 列制約が列のインライン定義にOracleの制約状態の1つを含む場合に表示されます。


 [ RELY | NORELY | RELY DISABLE | RELY ENABLE | VALIDATE | NOVALIDATE ]
Copy

Snowflakeはこれらの状態をサポートしていないため、 NOT NULL インライン制約は削除されます。

コード例

入力コード:
 CREATE TABLE Table1(
  col1 INT NOT NULL RELY
);
Copy
生成されたコード:
 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"}}'
  ;
Copy

ベストプラクティス

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

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

SSC-FDM-OR0007

説明

Snowflakeはオブジェクトのバージョン管理をサポートしていません。その結果、コード変換時に EDITIONABLE または NONEDITIONABLE の修飾子が削除され、警告メッセージが生成されます。

コード例

入力コード:
 CREATE OR REPLACE EDITIONABLE PROCEDURE FUN1 (n number)is
l_result number;
begin
    DELETE FROM employees;
end;
Copy
生成されたコード:
 --** 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;
$$;
Copy

ベストプラクティス

  • コードのバージョンを管理する異なった方法を検討してください。

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

SSC-FDM-OR0008

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0071 をご参照ください。

説明

「ALL」という量指定子はSnowflake SQL ではサポートされていません。コードを変換する際、この修飾子は削除され、警告メッセージが表示されます。この変更により、クエリの結果が予想と異なる場合があるため注意してください。

コード例

入力コード:
 SELECT location_id  FROM locations 
MINUS ALL 
SELECT location_id  FROM departments;
Copy
生成されたコード:
 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;
Copy

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

ベストプラクティス

  • 「ALL」量指定子の機能を置き換える同等のオプションをSnowflakeで探ります。

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

SSC-FDM-OR0009

説明

注釈

JavaScript でプロシージャとマクロを生成するには、コマンドに -t JavaScript または --PLTargetLanguage JavaScript のいずれかを追加します。

注釈

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

この警告は、 SQL の暗黙のカーソル値が使用されている場合に表示されます。Oracleは、クエリのタイプによってこれらの値を異なる方法で処理します。

  • SELECT ステートメントの場合: 値は返された行数を表します。

  • UPDATECREATEDELETE、 または INSERT ステートメントの場合: 値は影響を受ける行の数を表します。

警告が表示されるのは、この動作の違いが理由です。

コード例

入力コード:
-- 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;
Copy
生成されたコード:
 -- 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 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;
  }
$$;
Copy

ベストプラクティス

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

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

SSC-FDM-OR0010

説明

NUMBER データ型は、固定小数点数と浮動小数点数の両方を格納するために使用されます。Oracle Databaseを実行するすべてのオペレーティングシステムで一貫して動作します。Oracleでは、数値の格納には NUMBER データ型の使用を推奨しています。形式は NUMBER(X, Y) で、 _ X _ は精度(総桁数)、 _ Y _ はスケール(10進数)を表します。

たとえば、 NUMBER(5, 3) は、小数点の前に _ 2 _ 桁、小数点の後に _ 3 _ 桁の数字形式であることを表します。

12.345
Copy

その他の重要な考慮事項

  1. スケール _ Y _ は、小数点以下の桁数を指定します。

  2. スケール精度 _ Y-X _ は、小数点以下の後続ゼロの最小数を設定します。

このメッセージは、 NUMBER データ型の精度値がスケール値より小さい場合に表示されます。Snowflakeはこの構成をサポートしていないため、データの一貫性を維持するために精度値が自動的に増加します。

注釈

この問題は、他の既知の変換との組み合わせで発生する可能性があること、またはまったく発生しない可能性があることに注意してください。たとえば、スケールが19に置き換えられ、以前の精度が19より大きい場合、このメッセージは表示されません。

コード例

入力コード:
 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;
Copy
Col1   |
-------+
0.00009|
0.00002|
0.01268|

Copy
生成されたコード:
 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;
Copy
Col1   |
-------+
0.00009|
0.00002|
0.01268|

Copy

ベストプラクティス

SSC-FDM-OR0011

説明

この警告は、Snowflakeではこの機能が利用できないため、移行プロセスが RAISE_APLICATION_ERROR から3番目のオプション引数を削除した場合に表示されます。

コード例

入力コード:
 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;
Copy
生成されたコード:
 --** SSC-FDM-0029 - 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":1, "minor":0},"attributes":{"component":"oracle"}}'
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;
$$;
Copy

ベストプラクティス

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

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

SSC-FDM-OR0012

説明

Snowflakeで COMMIT や ROLLBACK ステートメントを使用する前に、まず特定のセットアップ命令を実行し、これらが正しく機能することを確認する必要があります。これらのステートメントが期待通りに機能するには、適切な構成が必要です。

 ALTER SESSION SET AUTOCOMMIT = false;
Copy

コード例

入力コード
 COMMIT;
ROLLBACK;
Copy
出力コード
 --** 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;
Copy

ベストプラクティス

  • コードを実行する前に、説明セクションで提供されたクエリを実行します。

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

SSC-FDM-OR0013

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0039 をご参照ください。

説明

このメッセージは、 SnowConvert が CYCLE 句を含むクエリを検出した場合に表示されます。Snowflakeは CYCLE 句をサポートしていないため、 SnowConvert は変換時にこのコードを自動的にコメントアウトします。

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

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

コード例

Connect By

入力コード:
 CREATE OR REPLACE FORCE NONEDITIONABLE VIEW VIEW01 AS
SELECT
      UNIQUE A.*
FROM
      TABLITA A
WHERE
      A.X = A.C CONNECT BY NOCYCLE A.C = 0 START WITH A.B = 1
HAVING
      X = 1
GROUP BY
      A.C;
Copy
生成されたコード:
 CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
SELECT DISTINCT
      A.*
FROM
      TABLITA A
WHERE
      A.X = A.C
GROUP BY
      A.C
HAVING
      X = 1
--** SSC-FDM-OR0013 - CYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE **
CONNECT BY
      A.C = 0 START WITH A.B = 1;
Copy

ベストプラクティス

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

  • その他のサポートについては、 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")
);
Copy
生成されたコード:
 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");
Copy

注釈

このエラーは、「MyDb」.「MyTable1」と「MyDb」.「MyTable」の列「COL1」のデータ型が異なるために発生します。

ベストプラクティス

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

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

SSC-FDM-OR0015

説明

この問題は、 LENGTHB 関数を使用した場合に発生します。この関数は列やリテラル値のサイズをバイト単位で計算します。移行中、この関数は自動的にSnowflakeの OCTET_LENGTH 関数に変換されます。

列パラメーターを指定してこの関数を使用すると、列の値のサイズが計算されます。結果のサイズは列のデータ型に依存するため、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;
Copy
|CHAR_COLUMN1   |LENGTHB(CHAR_COLUMN1)|LENGTH('HELLOWORLD')|
|---------------|---------------------|--------------------|
|Hello world    |15                   |11                  |


Copy
生成されたコード:
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;
Copy
|CHAR_COLUMN1|OCTET_LENGTH(CHAR_COLUMN1)|LENGTH('HELLO WORLD')|
|------------|--------------------------|---------------------|
|Hello world |11                        |11                   |


Copy

ベストプラクティス

  • コードで使用されているデータ型を確認します。

  • OCTET_LENGTH では、Unicode文字を含む文字列のサイズが大きく表示されることがあるため、列のエンコーディングを検証します。

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

SSC-FDM-OR0016

説明

COMMIT や ROLLBACK ステートメントはSnowflakeが自動的に処理するため、必要なくなりました。

コード例

入力コード
 COMMIT WORK FORCE '22.57.53';
ROLLBACK WORK FORCE '22.57.53';
Copy
出力コード
 --** 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;
Copy

ベストプラクティス

SSC-FDM-OR0017

説明

AT TIME ZONE 式は DBTIMEZONE キーワードをサポートしなくなりました。

コード例

入力コード:
 SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE DBTIMEZONE FROM DUAL;
Copy
生成されたコード:
 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;
Copy

ベストプラクティス

  • TIMEZONE セッションパラメーターを設定し、一貫した結果を得られるようにします。

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

SSC-FDM-OR0018

説明

この警告は、OracleのマージステートメントとSnowflakeのマージステートメント実装の間に機能差がある可能性があることを示しています。

コード例

入力コード:
 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';
Copy
生成されたコード:
 --** 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);
Copy

ベストプラクティス

  • 結果がOracleと異なる場合は、以下の手順を検討してください。

    • リンク で実行順序の優先順位を確認する

    • スキップされた DML ステートメントは、適宜、マージステートメントの前または後に実行する

  • その他のサポートについては、 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;
Copy
生成されたコード:
 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;
Copy

ベストプラクティス

  • クエリに ORDER BY 句を追加して、Snowflake結果の行の順序を一貫したものにします。

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

SSC-FDM-OR0020

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0051 をご参照ください。

説明

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

コード例

入力コード:
 CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
  NEW_EXCEPTION EXCEPTION;
  PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
  NEW_EXCEPTION2 EXCEPTION;
  PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
BEGIN

  IF true THEN
    RAISE NEW_EXCEPTION;
  END IF;

EXCEPTION
    WHEN NEW_EXCEPTION THEN
        --Handle Exceptions
        NULL;
END;
/
Copy
生成されたコード:
Snowflakeの記述
 CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
!!!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;
$$;
Copy

ベストプラクティス

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

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

SSC-FDM-OR0021

説明

Snowflake Scriptingの FOR LOOP 条件には、 INTEGER 値または INTEGER を返す式が必要です。浮動小数点数を使用すると、自動的に丸められ、意図したループの境界が変わってしまう可能性があります。

下限値は小数点以下を切り捨てます。例:

3.1 -> 36.7 -> 74.5 -> 5

上限値は小数点以下を切り捨てます。例:

3.1 -> 36.7 -> 64.5 -> 4

 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();
Copy
P1                                                |
--------------------------------------------------+
 Loop1:  1 2 3 4 5                                |
 Loop2:  2 3 4 5                                  |
 Loop3:  2 3 4 5                                  |

Copy

コード例

入力コード:
 CREATE OR REPLACE PROCEDURE p1
AS
BEGIN
FOR i NUMBER(5,1) IN 1.2 .. 5.7 LOOP
    NULL;
END LOOP;
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE p1 ()
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-OR0021 - FOR LOOP WITH FLOAT NUMBER AS LOWER OR UPPER BOUND MAY NOT BEHAVE CORRECTLY IN SNOWFLAKE SCRIPTING **
        FOR i IN 1.2 TO 5.7 LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

ベストプラクティス

  • FOR LOOP は、他のデータ型ではなく整数値を使用するように条件を変更します。

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

SSC-FDM-OR0022

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0100 をご参照ください。

説明

FOR LOOP は、Oracleでは複数の条件をサポートするのに対し、Snowflake Scriptingでは1つの条件のみをサポートします。Oracleから移行する場合は、最初の条件のみが変換され、それ以降の条件は無視されます。

コード例

入力コード:
 CREATE OR REPLACE PROCEDURE P3
AS
BEGIN
FOR i IN REVERSE 1..3,
REVERSE i+5..i+7
LOOP
    NULL;
END LOOP; 
END;
Copy
生成されたコード:
 CREATE OR REPLACE PROCEDURE P3 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        --** 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;
$$;
Copy

ベストプラクティス

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

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

SSC-FDM-OR0023

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0099 をご参照ください。

説明

この警告は、例外コード番号がSnowflake Scripting例外の許容範囲外の場合に表示されます。有効な例外コードは、-20000から-20999までの整数にする必要があります。

コード例

入力コード:
 CREATE OR REPLACE PROCEDURE procedure_exception
IS
my_exception EXCEPTION;
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
    NULL; 
END;
Copy
生成されたコード:
CREATE OR REPLACE PROCEDURE procedure_exception ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        --** 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;
$$;
Copy

ベストプラクティス

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

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

SSC-FDM-OR0024

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0002 をご参照ください。

説明

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

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

  2. 列定義がないユーザー定義タイプで列を使用する場合(例: 本文がないタイプや、列が定義されていないオブジェクトタイプ)

コード例

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

ベストプラクティス

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

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

SSC-FDM-OR0025

説明

プロシージャ内のOracle変数宣言で使用される NOT NULL 制約は、Snowflakeプロシージャ変数宣言では使用できません。

コード例

入力コード:
 CREATE OR REPLACE PROCEDURE PROC04
IS
 var3 FLOAT NOT NULL := 100;
BEGIN
NULL;
END;
Copy
生成されたコード:
 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;
$$;
Copy

推奨事項

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

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

SSC-FDM-OR0026

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0045 をご参照ください。

説明

このエラーは、データをサポートされていないデータ型に変換しようとしたときに発生します。

入力コード:
 select cast(' $123.45' as number, 'L999.99') from dual;
Copy
生成されたコード:
 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;
Copy

関連 EWIs

  1. SSC-EWI-OR0011: 「形式」パラメーターはこのコンテキストでは使用できません。

推奨事項

  • キャスト操作はユーザー定義関数(UDF/スタブ)に変換され、キャスト関数の動作をカスタマイズすることができます。

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

SSC-FDM-OR0027

注釈

この FDM は廃止されました。詳細情報については、 SSC-EWI-OR0029 のドキュメントをご参照ください。

説明

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

コード例

入力コード:
 SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
Copy
出力コード:
 SELECT
--** SSC-FDM-OR0027 - DEFAULT ON CONVERSION ERROR NOT SUPPORTED IN SNOWFLAKE IN SNOWFLAKE **
TO_NUMBER('2,00') "Value" FROM DUAL;
Copy

推奨事項

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

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

SSC-FDM-OR0028

注釈

この FDM は廃止されました。最新のドキュメントについては、 SSC-EWI-OR0031 をご参照ください。

説明

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

コード例

入力コード:
 SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy
出力コード:
 SELECT
--** SSC-FDM-OR0028 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE **
SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy

推奨事項

  • この関数はユーザー定義関数(UDF)スタブに変換され、 SYS_CONTEXT パラメーターの動作を再現するように変更することができます。

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

SSC-FDM-OR0029

説明

ALTER SESSION ステートメントに、現在のバージョンではサポートされていない句または構成が含まれています。

コード例

入力コード:
 ALTER SESSION SET SQL_TRACE TRUE;
Copy
出力コード:
 ----** SSC-FDM-OR0029 - THIS ALTER SESSION CONFIGURATION IS NOT SUPPORTED IN SNOWFLAKE **
--ALTER SESSION SET SQL_TRACE TRUE
                                ;
Copy

推奨事項

SSC-FDM-OR0030

説明

クエリが擬似列として ROWID を含む場合、ランタイムエラーを防ぐために NULL に変換され、エラー、警告、情報(EWI)メッセージが生成されます。現在のところ、 ROWID 機能を再現する機能はありません。

コード例

入力コードOracle:
 SELECT ROWID FROM T1;
Copy
出力コード:
 SELECT
--** SSC-FDM-OR0030 - ROWID PSEUDOCOLUMN IS NOT SUPPORTED IN SNOWFLAKE, IT WAS CONVERTED TO NULL TO AVOID RUNTIME ERRORS **
'' AS ROWID
FROM
T1;
Copy

推奨事項

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

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

SSC-FDM-OR0031

説明

このエラーは、Snowflakeの DML ステートメントが、Oracleの DML ステートメントで使用できるerror_logging句をサポートしていないことを示しています。

コード例

入力コード:
 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;
Copy
出力コード:
 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
          ;
Copy

推奨事項

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

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

SSC-FDM-OR0032

説明

この警告は、Oracleの STANDARD_HASH 関数を文字列以外のパラメーターで使用する場合に表示されます。これは、Snowflakeに移行した場合に異なる結果を生成する可能性があるためです。

コード例

入力コード:
 SELECT STANDARD_HASH(1+1) FROM DUAL;
Copy
 STANDARD_HASH(1+1)                               |
--------------------------------------------------+
 E39323970701D93598FC1D357F4BF04578CE3242         |

Copy
出力コード:
SELECT
--** SSC-FDM-OR0032 - STANDARD HASH FUNCTION WITH INPUT NON-STRING PARAMETER GENERATES A DIFFERENT RESULT IN SNOWFLAKE **
SHA1(1+1)
FROM DUAL;
Copy
 SHA1(1+1)                                        |
--------------------------------------------------+
 da4b9237bacccdf19c0760cab7aec4a8359010b0         |
Copy

推奨事項

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

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

SSC-FDM-OR0033

説明

この警告は、 SnowConvert がOracle DBMS_RANDOM.VALUE 組み込みパッケージ関数を移行するときに表示されます。この機能を再現するために作成されたユーザー定義関数(UDF)は、元のOracle関数に比べて精度が低くなっています。

コード例

入力コード:

 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;
Copy
出力コード:
 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;
$$;
Copy

推奨事項

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

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

SSC-FDM-OR0034

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0001 ドキュメントをご参照ください。

説明

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

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

  • START WITH LIMIT VALUE オプションは、 identity_options でのみ使用でき、 ALTER TABLE MODIFY と合わせてのみ利用可能です。START WITH LIMIT VALUE を使用すると、Oracleデータベースは次を実行します。

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

  2. ID列の最大値(増加シーケンスの場合)または最小値(減少シーケンスの場合)を求めます

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

  4. INCREMENT BY の値をハイウォーターマークに加算(増加シーケンスの場合)または減算(減少シーケンスの場合)して次の値を生成します

ALTER TABLE ORACLE

コード例

入力コード:
 CREATE SEQUENCE SEQUENCE1
  START WITH LIMIT VALUE;
Copy
出力コード:
 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"}}';
Copy

推奨事項

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

  • その他のヘルプについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-OR0035

説明

この警告は、 SnowConvert がOracle DBMS_OUTPUT.PUT_LINE 組み込みパッケージ関数を移行するときに表示されます。生成されたユーザー定義関数(UDF)を確認し、期待通りに動作することを確認してください。

この警告メッセージは、 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;
Copy
出力コード:
 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;
$$;
Copy

推奨事項

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

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

SSC-FDM-OR0036

説明

このメッセージは、Oracle組み込みパッケージのプロシージャまたは関数の移行中に SnowConvert が特定の引数を削除した場合に表示されます。

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;
Copy
出力コード:
 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;
$$;
Copy

推奨事項

SSC-FDM-OR0037

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0004 をご参照ください。

注釈

読みやすくするために、この例ではコードの一部を簡略化しています。

説明

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

  • コンテナーデータベースとプラグ可能なデータベース

  • サブクエリの使用制限

  • 階層的データ構造とクエリ

  • 外部テーブルの変更

  • データベースリンクとクロスデータベース接続

  • データベースのシャーディング構成

  • テーブルのパーティション分割

  • テーブルのサブパーティション分割

  • 階層クエリ操作

コード例

入力コード:
 SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Copy
出力コード:
 --** 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)
                                                                   ;
Copy

推奨事項

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

  • その他のサポートについては、 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;
Copy
出力コード:
 --** 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;
$$;
Copy

推奨事項

SSC-FDM-OR0039

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-OR0007 をご参照ください。

説明

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

コード例

入力コード(Oracle):
 CREATE TYPE type6 UNDER type5(COL1 INTEGER);
Copy
出力コード:
 ----** SSC-FDM-OR0039 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE **
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
                                           ;
Copy

推奨事項

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

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

SSC-FDM-OR0040

説明

Snowflakeでは数値の変更はできません。Snowflakeでは、10進数は常にドット(.)で区切られます。ALTER セッションステートメントがコメントアウトされ、警告メッセージが追加されています。

コード例

Oracle:
 ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';
Copy
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 = ',.'
                                               ;
Copy

推奨事項

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

  • その他のサポートについては、 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;
Copy
出力コード:
 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;
Copy

推奨事項

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

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

SSC-FDM-OR0042

説明

日付データ型は、Snowflakeでは日付またはタイムスタンプに変換されます。Snowflakeの日付タイプはOracleの日付タイプと動作が異なるため、この変換は --disableDateAsTimestamp フラグに依存します。

主な相違

Oracle DATE

Snowflake DATE

機能性

日時情報を格納する

日付情報(年、月、日)のみを格納する

内部ストレージ

エポックからの秒数を表すバイナリ数値

日付に最適化されたコンパクトな形式

ユースケース

汎用日時ストレージ

日付情報のみが必要なシナリオ

メリット

日付と時刻の両方をサポート

より効率的な日付のストレージ

制限事項

日付と時刻を別々に保存することはできない

時刻情報を格納しない

コード例

入力コード(Oracle):
 CREATE TABLE "PUBLIC"."TABLE1"
(
    "CREATED_DATE" DATE,
    "UPDATED_DATE" DATE
);
Copy
出力コード:
 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"}}'
    ;
Copy
 -- 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"}}'
    ;
Copy

推奨事項

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

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

SSC-FDM-OR0043

説明

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

コード例

入力コード:
 SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
Copy
出力コード:
 SELECT
--** SSC-FDM-OR0043 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED. **
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
Copy

推奨事項

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

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

SSC-FDM-OR0044

注釈

わかりやすくするために、いくつかの部分を省略してコードを簡略化しています。

説明

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

コード例

入力コードOracle:
 SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')
ORDER BY last_name;
Copy
出力コード:
 SELECT last_name
FROM
hr.employees
WHERE
--** 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;
Copy
  • REGEXP_LIKE 条件のユーザー定義関数にサポートされていない文字が含まれている場合は、正規表現を修正して、これらの文字を使用せずに同じマッチング動作を実現することを検討してください。サポートされていない文字の包括的なリストについては、 REGEXP_LIKE_UDF ドキュメントをご参照ください。

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

SSC-FDM-OR0047

説明

TIMESTAMP_OUTPUT_FORMAT セッションパラメーターは、「DD-MON-YY HH24.MI.SS.FF AM TZH:TZM」のように設定して、タイムスタンプが正しい形式で表示され、期待される出力と一致するようにする必要があります。

コード例

入力コード:
 SELECT SYSTIMESTAMP FROM DUAL;
Copy
Oracleのデフォルト TIMESTAMP 形式の例

13-JAN-21 04:18:37.288656 PM UTC

出力コード:
 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;
Copy
Snowflake がデフォルトで TIMESTAMPS を表示する方法

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

Recommendations

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

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

SSC-FDM-OR0045

注釈

この FDM は廃止されました。詳細情報については、 SSC-EWI-OR0010 のドキュメントをご参照ください。

説明

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

コード例

入力コード:
 SELECT * FROM TABLITA PARTITION(col1);
Copy
出力コード:
 SELECT * FROM
TABLITA
--        --** SSC-FDM-OR0045 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE **
--        PARTITION(col1)
                       ;
Copy

推奨事項

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

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

SSC-FDM-OR0046

注釈

読みやすくするために、この例ではコードの一部を簡略化しています。

説明

この警告は、 SELECT ステートメント内でサブクエリの制限が見つかった場合に発生します。

コード例

入力コード:
 SELECT * FROM LATERAL(SELECT * FROM TABLITA WITH READ ONLY CONSTRAINT T);
Copy
出力コード:
 SELECT * FROM LATERAL(SELECT * FROM
TABLITA
--        --** SSC-FDM-OR0046 - THE SUBQUERY RESTRICTION IS NOT POSSIBLE IN SNOWFLAKE **
--        WITH READ ONLY CONSTRAINT T
                                   );
Copy

推奨事項

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

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