SnowConvert AI - Oracleの問題
SSC-EWI-OR0001
'LIMIT VALUE' を含むシーケンス開始値は、Snowflakeではサポートされていません。
説明
このエラーは、 START WITH ステートメントの値が LIMIT VALUE の場合に表示されます。
In Oracle this clause is used only in ALTER TABLE
コード例
生成されたコード:
CREATE OR REPLACE SEQUENCE SEQUENCE1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0001 - SEQUENCE START VALUE WITH 'LIMIT VALUE' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
START WITH LIMIT VALUE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}';
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 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0002 - COLUMNS FROM EXPRESSION unknownTable%ROWTYPE NOT FOUND ***/!!!;
END;
$$;
SSC-EWI-OR0004
selectで使用されている構文は、Snowflakeではサポートされていません。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
この警告は、selectの句がSnowflakeでサポートされていない場合に発生します。サポートされていない条項は以下の通りです。
CONTAINERS
HIERARCHIES
EXTERNAL に MODIFY
SHARDS
コード例
入力コード:
SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
生成されたコード:
SELECT * FROM
TABLE1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0004 - THE 'OPTIONAL MODIFIED EXTERNAL' SYNTAX IN SELECT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
SSC-EWI-OR0005
BFILE/BLOBパラメーターはバイナリとみなされます。フォーマットが必要な場合があります。
説明
このエラーは、TO_CLOB を TO_VARCHAR関数に変換したときに発生します。BFILE/BLOBパラメーターのフォーマットが必要かもしれません。
コード例
入力コード:
SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0005 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED ***/!!!
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
SSC-EWI-OR0006
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() !!!RESOLVE EWI!!! /*** SSC-EWI-OR0006 - YOU MAY NEED TO SET TIMESTAMP OUTPUT FORMAT ('DD-MON-YY HH24.MI.SS.FF AM TZH:TZM') ***/!!!
FROM DUAL;
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-EWI-OR0007
Create TypeはSnowflakeでサポートされていません
説明
このメッセージは、SnowflakeがサポートしていないCreate Typeステートメントが使用された場合に追加されます。
コード例
生成されたコード:
--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
;
SSC-EWI-OR0008
フォーマットが不明な場合、予期せぬ動作をする可能性があります。
説明
このエラーは、予期しない動作をする可能性のある未知の日付フォーマットの場合に追加されます。
コード例
入力コード:
SELECT TO_CHAR(DATE '1998-12-25','iw-iyyy') FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0008 - UNKNOWN FORMAT, MAY HAVE UNEXPECTED BEHAVIOR ***/!!!
TO_CHAR(DATE '1998-12-25','iw-iyyy'') FROM DUAL;
注釈
'iw-iyyy'' はサポートされていないフォーマットであることに注意してください。
SSC-EWI-OR0009
JSON_TABLE はサポートされていません。
説明
JSON_TABLE 機能は現在サポートされていません。
コード例
入力コード:
SELECT jt.phones
FROM j_purchaseorder,
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR2(100) FORMAT JSON PATH '$.Phone')) AS jt;
生成されたコード:
SELECT jt.phones
FROM
j_purchaseorder,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0009 - JSON_TABLE IS NOT SUPPORTED ***/!!!
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR(100) FORMAT JSON PATH '$.Phone')) AS jt;
SSC-EWI-OR0010
Partitions句はSnowflakeによって処理されています。手動で修正する必要があります
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
この警告は、 PARTITION 句と SUBPARTITION 句がクエリ内にある場合に表示されます。Snowflakeがパーティションを自動処理します
コード例
入力コード:
SELECT * FROM table1 PARTITION(col1);
生成されたコード:
SELECT * FROM
table1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0010 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE. IT REQUIRES MANUAL FIX ***/!!!
PARTITION(col1);
SSC-EWI-OR0011
フォーマットパラメーターはサポートされていません。
説明
フォーマットパラメーターは、現在Snowflakeでは特殊なケースのCast関数ではサポートされていません。 例えば、"MONTH"や"DAY"を"DATE"や"TIMESTAMP"の中で使う場合です。
"MONTH/DD/YYYY" or "MM/DAY/YY" ...
Other scenario is when you are working with CAST function using NUMBER currently Snowflake need to have 4 arguments to show the decimal part, for now the output code not offer all arguments needed for Snowflake, you need to add the rest arguments for TO_NUMBER function.
コード例
入力コード:
SELECT CAST('12.48' AS NUMBER, '99.99') FROM DUAL;
生成されたコード:
SELECT
TO_NUMBER('12.48', '99.99', 38, 2)
FROM DUAL;
入力コード:
SELECT CAST('FEBRUARY/18/24' as DATE, 'MONTH/DD/YY') FROM DUAL;
SELECT CAST('FEB/MON/24' as DATE, 'MON/DAY/YY') FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER 'MONTH/DD/YY' IS NOT SUPPORTED ***/!!!
TO_TIMESTAMP ('FEBRUARY/18/24' , 'MONTH/DD/YY')
FROM DUAL;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER 'MON/DAY/YY' IS NOT SUPPORTED ***/!!!
TO_TIMESTAMP ('FEB/MON/24' , 'MON/DAY/YY')
FROM DUAL;
SSC-EWI-OR0013
NLSパラメーターはサポートされていません。
説明
NLSパラメーターは現在、以下の機能ではサポートされていません。
TOCHAR
TODATE
TONUMBER
TOTIMESTAMP
CAST
コード例
入力コード:
SELECT TO_NUMBER('-AusDollars100','9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''') "Amount" FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0013 - NLS PARAMETER ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''' NOT SUPPORTED ***/!!!
TO_NUMBER('-AusDollars100', '9G999D99') "Amount" FROM DUAL;
SSC-EWI-OR0014
NLSSORTはサポート対象外です。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
NLSSORT関数は現在、selectの本文ではサポートされていません。
コード例
入力コード:
SELECT NLSSORT(name, 'NLS_SORT = ENGLISH') FROM products;
生成されたコード:
// SnowConvert AI Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0014 - FUNCTION NLSSORT IS NOT SUPPORTED ***/!!!
NLSSORT(name, 'NLS_SORT = ENGLISH') FROM
products;
SSC-EWI-OR0016
XML はサポートされていません。
説明
以下のXML関連機能はサポートされていません。
EXTRACT
EXTRACTVALUE
XMLSEQUENCE
XMLTYPE
コード例
入力コード:
select * from table(XMLSequence(XMLType('
<Product ProductCode="200">
<BrandName>Notebook</BrandName>
<ProductList>
<Item ItemNo="200A"><Price>900</Price></Item>
<Item ItemNo="200B"><Price>700</Price></Item>
<Item ItemNo="200C"><Price>650</Price></Item>
<Item ItemNo="200D"><<Price>750</Price></Item>
</ProductList>
</Product>')));
生成されたコード:
select * from table(
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!
XMLSequence(
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!XMLType('
<Product ProductCode="200">
<BrandName>Notebook</BrandName>
<ProductList>
<Item ItemNo="200A"><Price>900</Price></Item>
<Item ItemNo="200B"><Price>700</Price></Item>
<Item ItemNo="200C"><Price>650</Price></Item>
<Item ItemNo="200D"><<Price>750</Price></Item>
</ProductList>
</Product>')));
SSC-EWI-OR0020
負の値は関数でサポートされていません。
説明
Snowflake does not support negative values for the function, then this will cause different behavior when executed. This EWI is emitted when a function like INSTR uses a negative position parameter that cannot be automatically translated.
注釈
INSTR with position = -1 is automatically translated to a functionally equivalent Snowflake expression and does not trigger this EWI. Only positions less than -1 (e.g., -3, -5) emit this warning.
コード例
入力コード:
SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;
生成されたコード:
SELECT
REGEXP_INSTR('CORPORATE FLOOR','OR', -3, 2) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0020 - NEGATIVE VALUES NOT SUPPORTED FOR FUNCTION ***/!!! FROM DUAL;
SSC-EWI-OR0023
AGGREGATE関数はサポートされていません。
重大性
高
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
このエラーは、以下の場合に発生します。aggregate関数
DENSE_RANK()
RANK()
PERCENT_RANK()
CUME_DIST()
は、Snowflakeではサポートされていません。
コード例
入力コード:
SELECT DENSE_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;
SELECT RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;
SELECT PERCENT_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;
SELECT CUME_DIST(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - DENSE_RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
DENSE_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
employees;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
employees;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - PERCENT_RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! PERCENT_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
employees;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - CUME_DIST AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! CUME_DIST(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
employees;
SSC-EWI-OR0026
ROWID はサポートされていません。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
ROWIDステートメントは現在サポートされていません。
コード例
Oracle:
SELECT QUERY_NAME.ROWID from TABLE1;
Snowflake Scripting:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0026 - ROWID NOT SUPPORTED ***/!!!
QUERY_NAME.ROWID from
TABLE1;
SSC-EWI-OR0029
DEFAULT ON CONVERSION ERRORはサポートされていません。
説明
変換エラー時のデフォルトはSnowflakeではサポートされていません。
コード例
入力コード:
SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
生成されたコード:
SELECT
PUBLIC.TO_NUMBER_UDF('2,00', 0) "Value" FROM DUAL;
SSC-EWI-OR0030
集約関数で使用されているKEEPステートメントはサポートされていません。
説明
このエラーは、集約関数の最初または最後の値のみが返されることを示すために使用されるKEEPステートメントがサポートされていないことを知らせるために表示されます。
コード例
入力コード:
SELECT
department_id,
MIN(salary) KEEP (
DENSE_RANK FIRST
ORDER BY
commission_pct
) "Worst"
FROM
employees;
生成されたコード:
SELECT
department_id,
MIN(salary)
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0030 - KEEP STATEMENT USED IN THE AGGREGATE FUNCTION IS NOT SUPPORTED ***/!!!
KEEP (
DENSE_RANK FIRST
ORDER BY
commission_pct
) "Worst"
FROM
employees;
SSC-EWI-OR0031
SYS_CONTEXTパラメーターはサポートされていません。
説明
このエラーは、SYS_CONTEXT関数パラメータがサポートされていない場合に発生します。Snowflakeは同様のコンテキスト機能をサポートしています。詳しくは ページ をご参照ください。
コード例
入力コード:
SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0031 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE ***/!!!
SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
SSC-EWI-OR0032
指定されたフォーマットのパラメーターはサポートされていません。
説明
このエラーは、関数内のパラメーターがサポートされていない場合に発生します。
コード例
入力コード:
SELECT TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0032 - PARAMETER USED IN THE FUNCTION 'TO_CHAR' WITH FORMAT AM IS NOT SUPPORTED ***/!!!
TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
SSC-EWI-OR0033
WITHのPL/SQL宣言はサポートされていません。
説明
WITHステートメント内のPL/SQL宣言はサポートされていません。
コード例
入力コード:
WITH FUNCTION get_domain ( url VARCHAR2 ) RETURN VARCHAR2 IS pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
END; SELECT aValue from aTable;
生成されたコード:
// SnowConvert AI Helpers Code section is omitted.
WITH
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0033 - PLDECLARATION IN WITH NOT SUPPORTED ***/!!!
FUNCTION get_domain ( url VARCHAR2 ) RETURN VARCHAR2 IS pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
END; SELECT aValue from
aTable;
SSC-EWI-OR0035
式のコレクションとして使用する場合、table関数はサポートされていません。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
TABLE関数は、式のコレクションとして使用される場合、Snowflakeではサポートされていません。
コード例
入力コード:
SELECT
TABLE2.COLUMN_VALUES
FROM TABLE1 i, TABLE(i.groups) TABLE2;
生成されたコード:
// SnowConvert AI Helpers Code section is omitted.
SELECT
TABLE2.COLUMN_VALUES
FROM
TABLE1 i,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0035 - TABLE FUNCTION IS NOT SUPPORTED WHEN IT IS USED AS A COLLECTION OF EXPRESSIONS ***/!!! TABLE(i.groups) TABLE2;
SSC-EWI-OR0036
型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
説明
この問題は、2つの特定のデータ型の間で算術演算が正しく動作しない場合に発生します。
コード例
入力コード:
SELECT
SYSDATE,
SYSDATE + '1',
SYSDATE + 'A'
from
dual;
生成されたコード:
SELECT
CURRENT_TIMESTAMP(),
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Date AND String ***/!!!
CURRENT_TIMESTAMP() + '1',
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Date AND String ***/!!!
CURRENT_TIMESTAMP() + 'A'
from
dual;
注釈
文字列と日付の間の操作は正しく動作しない可能性があることに注意してください。
SSC-EWI-OR0038
with要素文から検索句が削除されました。
説明
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
) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0038 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/!!!
SELECT aValue from
atable;
SSC-EWI-OR0039
The nocycle clause is not supported in Snowflake.
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
このメッセージは、SnowConvert AIが、SnowflakeではサポートされていないNOCYCLE句を持つクエリを見つけた場合に表示されます。
この句は、再帰があることを示します。
詳細は ドキュメント をご参照ください。
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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0039 - NOCYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
CONNECT BY
A.C = 0 START WITH A.B = 1;
SSC-EWI-OR0042
Model句はサポートされません。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
このメッセージは、SnowConvert AIが、SnowflakeではサポートされていないMODEL句を持つクエリを見つけた場合に表示されます。
コード例
入力コード:
SELECT
employee_id,
salary
FROM
employees
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
生成されたコード:
SELECT
employee_id,
salary
FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0042 - MODEL CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
SSC-EWI-OR0045
キャストのタイプLとFMLはサポートされていません。
説明
This issue happens when trying to cast using FML or L format that is not applicable in Snowflake, then the code is commented out and this message is being added.
コード例:
入力コード:
SELECT CAST(' $123.45' as number, 'L999.99') FROM DUAL;
SELECT CAST('$123.45' as number, 'FML999.99') FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0045 - CAST TYPE L AND FML NOT SUPPORTED ***/!!!
CAST(' $123.45' as NUMBER(38, 18) , 'L999.99') FROM DUAL;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0045 - CAST TYPE L AND FML NOT SUPPORTED ***/!!! CAST('$123.45' as NUMBER(38, 18) , 'FML999.99') FROM DUAL;
SSC-EWI-OR0046
Alter Table構文はSnowflakeでは使用できません。
説明
使用されているAlter Table構文はSnowflakeでは使用できないため、コードがコメントアウトされ、このメッセージが追加されてます。
コード例:
入力コード:
ALTER TABLE SOMENAME DEFAULT COLLATION SOMENAME;
ALTER TABLE SOMENAME ROW ARCHIVAL;
ALTER TABLE SOMENAME MODIFY CLUSTERING;
ALTER TABLE SOMENAME DROP CLUSTERING;
ALTER TABLE SOMENAME SHRINK SPACE COMPACT CASCADE;
生成されたコード:
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **
ALTER TABLE SOMENAME
DEFAULT COLLATION SOMENAME;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **
ALTER TABLE SOMENAME
ROW ARCHIVAL;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **
ALTER TABLE SOMENAME
MODIFY CLUSTERING;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **
ALTER TABLE SOMENAME
DROP CLUSTERING;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **
ALTER TABLE SOMENAME
SHRINK SPACE COMPACT CASCADE;
SSC-EWI-OR0047
TO_NCHARがTO_VARCHARに変換されましたが、Snowflakeではコンパイルできない可能性があります。
重大性
低
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
この警告は、関数 TO_NCHAR が見つかり、それが TO_VARCHAR 関数に変換された場合に追加されます。
変換によってコンパイルエラーが発生したり、出力が同じにならないケースが複数あります。
コード例
入力コード:
select TO_NCHAR(sysdate,'DY','nls_date_language=english') from dual
生成されたコード:
select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0047 - TO_NCHAR TRANSFORMED TO TO_VARCHAR, IT MAY NOT BE COMPILABLE IN SNOWFLAKE ***/!!!
TO_VARCHAR(CURRENT_TIMESTAMP(),'DY','nls_date_language=english') from dual;
上記の例をSnowflakeで使用するとエラーになります。
すべてのケースがエラーを引き起こしているわけではありません。
入力コード:
SELECT TO_NCHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0047 - TO_NCHAR TRANSFORMED TO TO_VARCHAR, IT MAY NOT BE COMPILABLE IN SNOWFLAKE ***/!!!
TO_VARCHAR(CURRENT_TIMESTAMP(), 'YYYY-MM-DD') FROM dual;
最後の例は、Snowflakeではエラーにならず、実行しても同等の出力が得られます。
SSC-EWI-OR0049
ステートフルパッケージのパッケージ定数はまだサポートされていません。
重大性
Critical
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
この警告は、まだサポートされていないステートフルパッケージのメンバーがあるときに追加されます。
この機能は将来提供される予定です。
コード例
入力コード:
CREATE OR REPLACE PACKAGE MY_PACKAGE
AS
TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
END;
生成されたコード:
CREATE SCHEMA IF NOT EXISTS MY_PACKAGE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0049 - PACKAGE TYPE DEFINITIONS in stateful package MY_PACKAGE are not supported yet ***/!!!
TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
SSC-EWI-OR0050
入力式が範囲外です
説明
This issue happens when trying to cast an input value that is out of range. It means the precision values are not applicable in Snowflake, then the code is commented out and this message is being added.
コード例:
入力コード:
SELECT CAST('123,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12.34567891234567891234567891234567891267+' AS NUMBER, '99.999999999999999999999999999999999999S') FROM DUAL;
SELECT CAST('12.34567891234567891234567891234567891267' AS NUMBER, '99.999999999999999999999999999999999999') FROM DUAL;
select cast(' 1.0E+123' as number, '9.9EEEE') from dual;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '123,456E+40' ***/!!!
CAST('123,456E+40' AS NUMBER(38, 18) , '999,999EEE') FROM DUAL;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '12.34567891234567891234567891234567891267+' ***/!!! CAST('12.34567891234567891234567891234567891267+' AS NUMBER(38, 18) , '99.999999999999999999999999999999999999S') FROM DUAL;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '12.34567891234567891234567891234567891267' ***/!!! CAST('12.34567891234567891234567891234567891267' AS NUMBER(38, 18) , '99.999999999999999999999999999999999999') FROM DUAL;
select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE ' 1.0E+123' ***/!!! cast(' 1.0E+123' as NUMBER(38, 18) , '9.9EEEE') from dual;
SSC-EWI-OR0051
PRAGMA EXCEPTION_INIT はサポートされていません。
説明
このEWIは、プロシージャ内で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
AS
$$
DECLARE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0099 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS ***/!!!
NEW_EXCEPTION EXCEPTION;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
NEW_EXCEPTION2 EXCEPTION (-20100, '');
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
BEGIN
IF (true) THEN
RAISE NEW_EXCEPTION;
END IF;
EXCEPTION
WHEN NEW_EXCEPTION THEN
--Handle Exceptions
NULL;
END;
$$;
SSC-EWI-OR0052
例外宣言はraise関数によって処理されます。
重大性
低
注釈
わかりやすくするため、出力コードの一部を省略しています。
注釈
Generate Procedures and Macros using JavaScript as the target language adding the following flag -t JavaScript or --PLTargetLanguage JavaScript
説明
例外はOracleとSnowflakeの両方の言語で定義できますが、RAISE関数は宣言、代入、エラーを投げるように設計されています。そのため、例外宣言はコメントアウトされ、警告が表示されます。
コード例
入力コード:
-- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
NEW_EXCEPTION EXCEPTION;
PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
BEGIN
IF true THEN
RAISE NEW_EXCEPTION;
END IF;
EXCEPTION
WHEN NEW_EXCEPTION THEN
--Handle Exceptions
END;
生成されたコード:
CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "12/16/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'PlInvokerRightsClause' NODE ***/!!!
//AUTHID DEFINER
null
// SnowConvert AI Helpers Code section is omitted.
try {
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0052 - EXCEPTION DECLARATION IS HANDLED BY RAISE FUNCTION ***/!!!
/* NEW_EXCEPTION EXCEPTION */
;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
/* PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63) */
;
if (true) {
RAISE(-63,`NEW_EXCEPTION`,`NEW_EXCEPTION`);
}
} catch(error) {
switch(error.name) {
case `NEW_EXCEPTION`: {
break;
}
default: {
throw error;
break;
}
}
}
//Handle Exceptions
;
$$;
注釈
Some parts of the output code are omitted to improve readability.
SSC-EWI-OR0053
不適切な入力フォーマット
説明
This issue happens when trying to cast using a wrong input format, then the code is commented out and this message is being added.
コード例:
入力コード:
SELECT CAST('12sdsd3,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12345sdsd' AS NUMBER, '99999') FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0053 - INCORRECT INPUT FORMAT '12sdsd3,456E+40' ***/!!!
CAST('12sdsd3,456E+40' AS NUMBER(38, 18) , '999,999EEE') FROM DUAL;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0053 - INCORRECT INPUT FORMAT '12345sdsd' ***/!!! CAST('12345sdsd' AS NUMBER(38, 18) , '99999') FROM DUAL;
SSC-EWI-OR0057
このシナリオでは、入れ子になったプロシージャや関数に対する変換はサポートされていません。
重大性
Critical
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
他の関数やプロシージャの中に入れ子になった関数の変換はサポートされていません。同様に、関数や匿名ブロックの中に入れ子になったプロシージャは、現在のところサポートされていません。
しかし、他のプロシージャやパッケージの中の入れ子になったプロシージャはサポートされています。詳細については、 入れ子になったプロシージャのドキュメント をご参照ください。
コード例
入力コード:
CREATE OR REPLACE function FOO1 RETURN INTEGER AS
FUNCTION FOO2 RETURN INTEGER AS
BEGIN
RETURN 123;
END;
BEGIN
RETURN FOO2() + 456;
END;
生成されたコード:
!!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0046 - NESTED FUNCTION/PROCEDURE DECLARATIONS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE PROCEDURE FOO1 ()
RETURNS INTEGER
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED FUNCTION IS NOT SUPPORTED IN THIS SCENARIO ***/!!!
FUNCTION FOO2 RETURN INTEGER AS
BEGIN
RETURN 123;
END;
BEGIN
RETURN FOO2() + 456;
END;
$$;
SSC-EWI-OR0067
Snowflakeでは、1つのステートメントで複数の制約定義はサポートされていません。
重大性
中
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
Snowflakeでは、1つのALTER TABLEステートメントによる複数の制約定義はサポートされていません。
コード例
Oracle:
ALTER TABLE TABLE1 ADD (
CONSTRAINT TABLE1_PK
PRIMARY KEY
(ID)
ENABLE VALIDATE,
CONSTRAINT TABLE1_FK foreign key(ID2)
references TABLE2 (ID) ON DELETE CASCADE);
Snowflake Scripting:
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0067 - MULTIPLE CONSTRAINT DEFINITION IN A SINGLE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
ALTER TABLE TABLE1
ADD (
CONSTRAINT TABLE1_PK
PRIMARY KEY
(ID) ,
CONSTRAINT TABLE1_FK foreign key(ID2)
references TABLE2 (ID) ON DELETE CASCADE);
SSC-EWI-OR0068
シーケンス開始値がSnowflakeで許容される最大値を超えています。
説明
このエラーは、 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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0068 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. ***/!!!
START WITH 9223372036854775808
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
CREATE OR REPLACE SEQUENCE SEQUENCE2
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0068 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. ***/!!!
START WITH -9223372036854775809
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
SSC-EWI-OR0069
シーケンスCURRVALプロパティは Snowflake ではサポートされていません。
説明
シーケンスCURRVALプロパティは Snowflake ではサポートされていません。
コード例
Oracle:
select seq1.currval from dual;
Snowflake Scripting:
select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0069 - THE SEQUENCE CURRVAL PROPERTY IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
seq1.currval from dual;
SSC-EWI-OR0070
バイナリ演算はサポートされていません
重大性
中
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
バイナリ演算は現在サポートされていないため、ユーザー定義関数を追加されます。
コード例
Oracle:
-- Unsupported operation: EXCEPT DISTINCT
SELECT someValue MULTISET EXCEPT DISTINCT multiset_except FROM customers_demo;
Snowflake Scripting:
-- Unsupported operation: EXCEPT DISTINCT
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0070 - BINARY OPERATION MULTISET EXCEPT IS NOT SUPPORTED ***/!!!
someValue MULTISET EXCEPT DISTINCT multiset_except FROM
customers_demo;
SSC-EWI-OR0071
設定された量指定子はサポートされていません
説明
量指定子「all」はSnowflakeではサポートされていません。この修飾子はソースコードから削除され、警告が追加されます。結果のコードは予期せぬ動作をする場合があります。
コード例
入力コード:
SELECT location_id FROM locations
MINUS ALL
SELECT location_id FROM departments;
生成されたコード:
SELECT location_id FROM
locations
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0071 - QUANTIFIER 'ALL' NOT SUPPORTED FOR THIS SET OPERATOR, RESULTS MAY DIFFER ***/!!!
MINUS
SELECT location_id FROM
departments;
Snowflakeでは、INTERSECTおよびMINUS/EXCEPT演算子は常に重複値を削除します。
ベストプラクティス
SELECT location_id FROM
(
SELECT location_id, ROW_NUMBER()OVER(PARTITION BY location_id ORDER BY 1) rn
FROM locations
MINUS
SELECT number_val, ROW_NUMBER()OVER(PARTITION BY location_id ORDER BY 1) rn
FROM departments
);
SSC-EWI-OR0072
手続きメンバーはサポートされていません
重大性
中
注釈
わかりやすくするため、出力コードの一部を省略しています。
注釈
Generate Procedures and Macros using JavaScript as the target language adding the following flag -t JavaScript or --PLTargetLanguage JavaScript
説明
手続きメンバーは現在サポートされていません。手続きメンバーの例:
定数宣言。
カーソル宣言。
プラグマ宣言。
変数宣言。
コード例
Oracle:
-- Additional Params: -t JavaScript
CREATE OR REPLACE EDITIONABLE PROCEDURE PROCEDURE1
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
NULL;
END;
Snowflake Scripting:
--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE PROCEDURE1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "12/16/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
// SnowConvert AI Helpers Code section is omitted.
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0072 - PROCEDURAL MEMBER PRAGMA DECLARATION NOT SUPPORTED. ***/!!!
/* PRAGMA AUTONOMOUS_TRANSACTION */
;
null;
$$;
SSC-EWI-OR0075
ステートメント内のラベルがサポートされていません
重大性
中
注釈
わかりやすくするため、出力コードの一部を省略しています。
注釈
Generate Procedures and Macros using JavaScript as the target language adding the following flag -t JavaScript or --PLTargetLanguage JavaScript
説明
ステートメント内のラベルは、コードブロックの参照についてサポートされていません。
コード例
Oracle:
--Additional Params: -t JavaScript
CREATE OR REPLACE EDITIONABLE PROCEDURE PROCEDURE1
IS
BEGIN
-- procedure body
EXIT loop_b;
-- procedure body continuation
END;
Snowflake Scripting:
--Additional Params: -t JavaScript
--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE PROCEDURE1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/16/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
// REGION SnowConvert AI Helpers Code
var RAISE = function (code,name,message) {
message === undefined && ([name,message] = [message,name])
var error = new Error(message);
error.name = name
SQLERRM = `${(SQLCODE = (error.code = code))}: ${message}`
throw error;
};
var SQL = {
FOUND : false,
NOTFOUND : false,
ROWCOUNT : 0,
ISOPEN : false
};
var _RS, _ROWS, SQLERRM = "normal, successful completion", SQLCODE = 0;
var getObj = (_rs) => Object.assign(new Object(),_rs);
var getRow = (_rs) => (values = Object.values(_rs)) && (values = values.splice(-1 * _rs.getColumnCount())) && values;
var fetch = (_RS,_ROWS,fmode) => _RS.getRowCount() && _ROWS.next() && (fmode ? getObj : getRow)(_ROWS) || (fmode ? new Object() : []);
var EXEC = function (stmt,binds,opts) {
try {
binds = !(arguments[1] instanceof Array) && ((opts = arguments[1]) && []) || (binds || []);
opts = opts || new Object();
binds = binds ? binds.map(fixBind) : binds;
_RS = snowflake.createStatement({
sqlText : stmt,
binds : binds
});
_ROWS = _RS.execute();
if (opts.sql !== 0) {
var isSelect = stmt.toUpperCase().trimStart().startsWith("SELECT");
var affectedRows = isSelect ? _RS.getRowCount() : _RS.getNumRowsAffected();
SQL.FOUND = affectedRows != 0;
SQL.NOTFOUND = affectedRows == 0;
SQL.ROWCOUNT = affectedRows;
}
if (opts.row === 2) {
return _ROWS;
}
var INTO = function (opts) {
if (opts.vars == 1 && _RS.getColumnCount() == 1 && _ROWS.next()) {
return _ROWS.getColumnValue(1);
}
if (opts.rec instanceof Object && _ROWS.next()) {
var recordKeys = Object.keys(opts.rec);
Object.assign(opts.rec,Object.fromEntries(new Map(getRow(_ROWS).map((element,Index) => [recordKeys[Index],element]))))
return opts.rec;
}
return fetch(_RS,_ROWS,opts.row);
};
var BULK_INTO_COLLECTION = function (into) {
for(let i = 0;i < _RS.getRowCount();i++) {
FETCH_INTO_COLLECTIONS(into,fetch(_RS,_ROWS,opts.row));
}
return into;
};
if (_ROWS.getRowCount() > 0) {
return _ROWS.getRowCount() == 1 ? INTO(opts) : BULK_INTO_COLLECTION(opts);
}
} catch(error) {
RAISE(error.code,error.name,error.message)
}
};
var FETCH_INTO_COLLECTIONS = function (collections,fetchValues) {
for(let i = 0;i < collections.length;i++) {
collections[i].push(fetchValues[i]);
}
};
var IS_NULL = (arg) => !(arg || arg === 0);
var formatDate = (arg) => (new Date(arg - (arg.getTimezoneOffset() * 60000))).toISOString().slice(0,-1);
var fixBind = function (arg) {
arg = arg instanceof Date ? formatDate(arg) : IS_NULL(arg) ? null : arg;
return arg;
};
// END REGION
/* -- procedure body
EXIT loop_b */
// procedure body
// procedure body
;
// procedure body continuation
;
$$;
SSC-EWI-OR0076
組み込みパッケージはサポート対象外です。
説明
組み込みパッケージの変換は現在サポートされていません。
コード例
入力コード(Oracle):
SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'UTL_RAW.CAST_TO_RAW' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS CAST_TO_RAW,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_UTILITY.GET_TIME' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS GET_TIME
FROM DUAL;
SSC-EWI-OR0078
Execute Immediate内の動的なSQL文を解析できません。
説明
SnowConvert AIは、Execute Immediate内のダイナミック SQL ステートメントを解析できませんでした。
注釈
Generate Procedures and Macros using JavaScript as the target language adding the following flag -t JavaScript or --PLTargetLanguage JavaScript
コード例
Oracle:
--Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE PROC1 AS
BEGIN
EXECUTE IMMEDIATE 'NOT A VALID SQL STATEMENT';
END;
Snowflake Scripting:
CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "12/16/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
// SnowConvert AI Helpers Code section is omitted.
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0078 - UNABLE TO PARSE DYNAMIC SQL STATEMENT ***/!!!
/*EXEC(`NOT A VALID SQL STATEMENT`)*/
;
$$;
SSC-EWI-OR0082
入れ子になった型属性式を変換できません
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
このエラーメッセージは、selectのようなクエリが、型として定義された列内の属性にアクセスしようとしたときに表示されます。これらは自動変換できませんが、手動で素早く変換できます。
コード例:
入力コードOracle:
CREATE TYPE type1 AS OBJECT (
attribute1 VARCHAR2(20),
attribute2 NUMBER
);
CREATE TYPE type2 AS OBJECT (
property1 type1,
property2 DATE
);
CREATE TABLE my_table (
id NUMBER PRIMARY KEY,
column1 type2
);
INSERT INTO my_table VALUES (
1, type2(type1('value1', 100), SYSDATE)
);
SELECT column1.property1.attribute1, column1.property2
FROM my_table;
生成されたコード:
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type1 AS OBJECT (
attribute1 VARCHAR2(20),
attribute2 NUMBER
)
;
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type2 AS OBJECT (
property1 type1,
property2 DATE
)
;
CREATE OR REPLACE TABLE my_table (
id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/ PRIMARY KEY,
column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'type2' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
CREATE OR REPLACE VIEW my_table_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
AS
SELECT
id,
column1:property1:attribute1 :: VARCHAR AS attribute1,
column1:property1:attribute2 :: NUMBER AS attribute2,
column1:property2 :: DATE AS property2
FROM
my_table;
INSERT INTO my_table
VALUES (
1, type2(type1('value1', 100) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'type1' NODE ***/!!!, CURRENT_TIMESTAMP()) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'type2' NODE ***/!!!
);
SELECT column1.property1.attribute1,
column1.property2
FROM
my_table;
SSC-EWI-OR0087
Outer Joinの順番に失敗しました
重大性
低
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
この問題は、以前に(+)演算子を使用した外部結合があったクエリで、新しいANSI JOIN句を並べ替える際にエラーが発生した場合に生じます。WHERE句で互いに結合するテーブルのサイクルを持つクエリは、この問題を引き起こす可能性があります。
このEWIが存在する場合、JOIN句はその順序のために正しく機能しないことがあります。
コード例
入力コードOracle:
SELECT
l.location_id, l.state_province,
r.region_id, r.region_name,
c.country_id, c.country_name
FROM
hr.countries c, hr.regions r, hr.locations l, hr.departments d WHERE
l.location_id (+) = c.region_id AND
c.region_id (+) = r.region_id AND
r.region_id (+) = c.region_id AND
l.location_id (+) = d.location_id;
生成されたコード:
SELECT
l.location_id, l.state_province,
r.region_id, r.region_name,
c.country_id, c.country_name
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0087 - ORDERING THE OUTER JOINS FAILED. QUERY MAY NOT BEHAVE CORRECTLY ***/!!!
hr.departments d
LEFT OUTER JOIN
hr.locations l
ON
l.location_id = c.region_id
AND
l.location_id = d.location_id
LEFT OUTER JOIN
hr.countries c
ON
c.region_id = r.region_id
LEFT OUTER JOIN
hr.regions r
ON
r.region_id = c.region_id;
SSC-EWI-OR0089
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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0089 - REGEXP_LIKE_UDF MATCH PARAMETER MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE. ***/!!!
PUBLIC.REGEXP_LIKE_UDF(last_name, '([aeiou])\\1', 'i')
ORDER BY last_name;
When the REGEXP_LIKE condition includes characters that are not supported by the user-defined function, you can change the regular
expression to simulate the behavior of the missing character in the match parameter. For more information about unsupported characters,
see REGEXP_LIKE_UDF.
For additional support, contact Snowflake at snowconvert-support@snowflake.com.
SSC-EWI-OR0090
非Ansi外部結合に無効なBetween述語があります
重大性
中
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
この問題は、Snowflakeで実行できないBETWEEN句の中に、(+)演算子を持つOUTER JOINがある場合に発生します。これは通常、BETWEEN句の間隔で複数のテーブルが使用されている場合に発生します。
コード例
入力コードOracle:
SELECT
*
FROM
hr.countries c, hr.regions r, hr.locations l WHERE
l.location_id BETWEEN r.region_id(+) AND c.region_id(+);
生成されたコード:
SELECT
*
FROM
hr.countries c,
hr.regions r,
hr.locations l WHERE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0090 - INVALID NON-ANSI OUTER JOIN BETWEEN PREDICATE CASE FOR SNOWFLAKE. ***/!!!
l.location_id BETWEEN r.region_id(+) AND c.region_id(+);
SSC-EWI-OR0092
NUMBERデータ型の負のスケールが出力から削除されました。
説明
この問題は、NUMBERに四捨五入を適用するために、負のスケールを持つNUMBERを使用している場合に発生します。Snowflakeはこの機能をサポートしておらず、このメッセージはスケールが削除されたことを示すために使用されます。
コード例
クエリ
CREATE TABLE number_table
(
col1 NUMBER(38),
col2 NUMBER(38, -1),
col3 NUMBER(*, -2)
);
INSERT INTO number_table(col1, col2, col3) VALUES (555, 555, 555);
SELECT * FROM number_table;
結果
COL1|COL2|COL3|
----+----+----+
555| 560| 600|
クエリ
CREATE OR REPLACE TABLE number_table
(
col1 NUMBER(38) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col2 NUMBER(38) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col3 NUMBER(38) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO number_table(col1, col2, col3) VALUES (555, 555, 555);
SELECT * FROM
number_table;
結果
|COL1|COL2|COL3|
|----|----|----|
|555 |555 |555 |
SSC-EWI-OR0095
Interval型とDate型の間の操作はサポートされていません
説明
INTERVAL YEAR TO MONTH および INTERVAL DAY TO SECOND はサポートされていないデータ型で、それらは VARCHAR(20) に変換されます。 したがって、 Date型 と元の Interval型列 との間のすべての算術演算はサポートされていません。
さらに、SnowflakeではInterval型とDate型(この順序)の間の操作はサポートされておらず、これらの操作でもこのEWIが使用されます。
コード例
入力コード:
CREATE TABLE table_with_intervals
(
date_col DATE,
time_col TIMESTAMP,
intervalYearToMonth_col INTERVAL YEAR TO MONTH,
intervalDayToSecond_col INTERVAL DAY TO SECOND
);
-- Date + Interval Y to M
SELECT date_col + intervalYearToMonth_col FROM table_with_intervals;
-- Date - Interval D to S
SELECT date_col - intervalDayToSecond_col FROM table_with_intervals;
-- Timestamp + Interval D to S
SELECT time_col + intervalDayToSecond_col FROM table_with_intervals;
-- Timestamp - Interval Y to M
SELECT time_col - intervalYearToMonth_col FROM table_with_intervals;
生成されたコード:
CREATE OR REPLACE TABLE table_with_intervals
(
date_col TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
time_col TIMESTAMP(6),
intervalYearToMonth_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR TO MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!,
intervalDayToSecond_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO SECOND DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
-- Date + Interval Y to M
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col + intervalYearToMonth_col FROM
table_with_intervals;
-- Date - Interval D to S
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col - intervalDayToSecond_col FROM
table_with_intervals;
-- Timestamp + Interval D to S
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col + intervalDayToSecond_col FROM
table_with_intervals;
-- Timestamp - Interval Y to M
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col - intervalYearToMonth_col FROM
table_with_intervals;
SSC-EWI-OR0097
プロシージャプロパティはSnowflakeプロシージャではサポートされていません
説明
Oracleの CREATE PROCEDURE 追加プロパティは必須ではなく、Snowflakeの CREATE PROCEDURE では同等のものはありません。
コード例
入力コードOracle:
CREATE OR REPLACE PROCEDURE PROC01
DEFAULT COLLATION USING_NLS_COMP
AUTHID CURRENT_USER
ACCESSIBLE BY (PROCEDURE PROC03)
AS
BEGIN
NULL;
END;
生成されたコード:
CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0097 - PROCEDURE PROPERTIES ARE NOT SUPPORTED IN SNOWFLAKE PROCEDURES ***/!!!
AS
$$
BEGIN
NULL;
END;
$$;
SSC-EWI-OR0099
例外コードがSnowflakeスクリプトの制限を超えています。
説明
このEWIは、例外宣言エラーコードが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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0099 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS ***/!!!
my_exception EXCEPTION;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
NULL;
END;
$$;
SSC-EWI-OR0100
複数の条件を含むForループは、現在Snowflakeスクリプトではサポートされていません。最初の条件のみ使用されています
説明
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": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0100 - FOR LOOP WITH MULTIPLE CONDITIONS IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
FOR i IN REVERSE 1 TO 3
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
LOOP
NULL;
END LOOP;
END;
$$;
SSC-EWI-OR0101
特定のFor Loop句は現在Snowflakeスクリプトではサポートされていません
説明
Oracleでは、 FOR LOOP の条件に追加句を加えることができます。 BY 、 WHILE 、および WHEN 句などです。 WHILE 句と WHEN 句はどちらも、条件としてブール式を追加できます。 一方、 BY 句は、イテレーションにおける段階的なインクリメントを可能にします。これらの追加の句はSnowflakeスクリプトではサポートされておらず、変換時には無視されます。
コード例
入力コードOracle:
CREATE OR REPLACE PROCEDURE P2
AS
BEGIN
FOR i IN 1..10 WHILE i <= 5 LOOP
NULL;
END LOOP;
FOR i IN 5..15 BY 5 LOOP
NULL;
END LOOP;
END;
生成されたコード:
CREATE OR REPLACE PROCEDURE P2 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "WHILE" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
FOR i IN 1 TO 10
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
LOOP
NULL;
END LOOP;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "BY" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
FOR i IN 5 TO 15
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
LOOP
NULL;
END LOOP;
END;
$$;
SSC-EWI-OR0103
For Loopフォーマットは現在Snowflakeスクリプトではサポートされていません。
説明
Oracleでは、 FOR LOOP にさまざまな条件を指定できます。ブール式、コレクション、レコードがサポートされています。しかし、Snowflakeスクリプトは、境界として定義された整数を持つ FOR LOOP のみをサポートしています。それ以外のフォーマットはサポートされていないとマークされ、変換には手作業が必要になります。
Oracleイテレーション制御句 のうちSnowflakeの FOR LOOP でサポートされていないものは以下の通りです。
危険
cursor_iteration_control は現在サポートされていません。 式から括弧を取り除くと、 CURSOR FOR LOOP に変換されます。
元:
FOR i IN (cursor_variable) LOOP NULL; END LOOP;
次のように変更:
FOR i IN cursor_variable LOOP NULL; END LOOP;
コード例
入力コードOracle:
CREATE OR REPLACE PROCEDURE P3
AS
TYPE values_aat IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
l_employee_values values_aat;
BEGIN
FOR power IN REPEAT power*2 WHILE power <= 64 LOOP
NULL;
END LOOP;
FOR i IN VALUES OF l_employee_values LOOP
NULL;
END LOOP;
END;
生成されたコード:
CREATE OR REPLACE PROCEDURE P3 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
-- TYPE values_aat IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
l_employee_values VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'values_aat' USAGE CHANGED TO VARIANT ***/!!!;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0103 - FOR LOOP FORMAT IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "WHILE" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
FOR power IN REPEAT power*2 WHILE power <= 64
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
LOOP
NULL;
END LOOP;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0103 - FOR LOOP FORMAT IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
FOR i IN VALUES OF :l_employee_values
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
LOOP
NULL;
END LOOP;
END;
$$;
SSC-EWI-OR0104
使用できないコレクション変数
説明
Oracleのコレクションは現在SnowConvert AIではサポートされていないため、コレクションタイプの変数とその使用法はすべてコメントアウトされます。
注釈
Generate Procedures and Macros using JavaScript as the target language adding the following flag -t JavaScript or --PLTargetLanguage JavaScript
コード例
入力コードOracle:
-- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE collection_variable_sample_proc
IS
TYPE POPULATION IS TABLE OF NUMBER INDEX BY VARCHAR2(64); --Associative array
city_population POPULATION := POPULATION();
i VARCHAR2(64);
BEGIN
city_population('Smallville') := 2000;
city_population('Midland') := 750000;
i := city_population.FIRST;
i := city_population.NEXT(1);
END;
出力コード
CREATE OR REPLACE PROCEDURE collection_variable_sample_proc ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "12/16/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
// SnowConvert AI Helpers Code section is omitted.
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0072 - PROCEDURAL MEMBER TYPE DEFINITION NOT SUPPORTED. ***/!!!
/* TYPE POPULATION IS TABLE OF NUMBER INDEX BY VARCHAR2(64) */
;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
/* city_population POPULATION := POPULATION() */
;
let I;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
/* city_population('Smallville') := 2000 */
;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
/* city_population('Midland') := 750000 */
;
I =
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
/*city_population.FIRST*/
null;
I =
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
/*city_population.NEXT(1)*/
null;
$$;
SSC-EWI-OR0105
BFILE列の使用については、追加作業が必要です。BUILD_STAGE_URL関数は、推奨される回避策です
説明
The transformation for BFILE datatype is VARCHAR. However, the translation for the Oracle built-in functions used to interact with BFILE types is currently not supported. The column is migrated to a VARCHAR to store the file path and name. For more information, see the BFILENAME_UDF documentation.
コード例
入力コードOracle:
CREATE TABLE bfiletable ( bfile_column BFILE );
INSERT INTO bfiletable VALUES ( BFILENAME('mydirectory', 'myfile.png') );
生成されたコード:
CREATE OR REPLACE TABLE bfiletable ( bfile_column
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
INSERT INTO bfiletable
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png') );
ベストプラクティス
Snowflakeクエリ
CREATE OR REPLACE TABLE bfiletable ( bfile_column
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO bfiletable
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png') );
結果
URL |
------------------------------------------------------------------------------------------------------+
https://thecompany.snowflakecomputing.com/api/files/CODETEST/PUBLIC/MY_STAGE/%2Fmydirectory%2Fmyfile.jpg|
注釈
この機能はさまざまなクラウドストレージオプションで動作しますが、ステージでローカルファイルを使用することに関する情報については、こちらの ドキュメント をご参照ください。
SSC-EWI-OR0108
次の代入文は、Snowflakeスクリプトではサポートされていません
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
Oracleの変数型の中には、Snowflakeで直接変換できないものがあります。現在、カーソル、コレクション、レコード、ユーザー定義型変数、プレースホルダー、オブジェクト、出力パラメーターの変換はSnowスクリプトではサポートされていません。
これらの変数をSnowflakeの 半構造化データ型 に変更することで、状況によっては回避策になるかもしれません。
コード例
入力コード:
CREATE OR REPLACE PROCEDURE pinvalidassign(out_parameter IN OUT NUMBER)
AS
record_variable employees%ROWTYPE;
TYPE cursor_type IS REF CURSOR;
cursor1 cursor_type;
cursor2 SYS_REFCURSOR;
TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64);
collection_variable collection_type;
BEGIN
--Record Example
record_variable.last_name := 'Ortiz';
--Cursor Example
cursor1 := cursor2;
--Collection
collection_variable('Test') := 5;
--Out Parameter
out_parameter := 123;
END;
生成されたコード:
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "employees" **
CREATE OR REPLACE PROCEDURE pinvalidassign (out_parameter 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/16/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
record_variable OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL REF CURSOR TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
-- TYPE cursor_type IS REF CURSOR;
cursor1_res RESULTSET;
cursor2_res RESULTSET;
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
-- TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64);
collection_variable VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'collection_type' USAGE CHANGED TO VARIANT ***/!!!;
BEGIN
--Record Example
record_variable := OBJECT_INSERT(record_variable, 'LAST_NAME', 'Ortiz', true);
--Cursor Example
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
cursor1 := :cursor2;
--Collection
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
collection_variable('Test') := 5;
--Out Parameter
out_parameter := 123;
END;
$$;
SSC-EWI-OR0109
Using句の引数としての式は、Snowflakeスクリプトではサポートされていません
説明
Oracleは、EXECUTE IMMEDIATEステートメントのUSING句の引数としての式の使用をサポートしています。この機能はSnowflakeスクリプトではサポートされていません。
Snowflakeスクリプトは変数式をサポートしており、手動で変数に代入することで式を置き換えることができます(以下の例を参照)。
コード例
入力コード:
CREATE OR REPLACE PROCEDURE expression_arguments
IS
immediate_input INTEGER := 0;
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO immediate_table VALUES (:value)' USING immediate_input+1;
END;
生成されたコード:
CREATE OR REPLACE PROCEDURE expression_arguments ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
immediate_input INTEGER := 0;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE 'INSERT INTO immediate_table
VALUES (?)' USING (
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0109 - EXPRESSIONS AS ARGUMENTS OF USING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
:immediate_input +1);
END;
$$;
SSC-EWI-OR0110
SnowflakeではUpdate句はサポートされていません
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
Snowスクリプトには FOR UPDATE 句に相当するものがないので、EWIが追加され、句はコメントアウトされます。
コード例
入力コード:
CREATE OR REPLACE PROCEDURE for_update_clause
AS
update_record f_employee%rowtype;
CURSOR c1 IS SELECT * FROM f_employee FOR UPDATE OF employee_number nowait;
BEGIN
FOR CREC IN C1 LOOP
UPDATE f_employee SET employee_number = employee_number + 1000 WHERE CURRENT OF c1;
IF crec.id = 2 THEN
DELETE FROM f_employee WHERE CURRENT OF c1;
EXIT;
END IF;
END LOOP;
END;
生成されたコード:
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "f_employee" **
CREATE OR REPLACE PROCEDURE for_update_clause ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
update_record OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
--** SSC-PRF-0009 - PERFORMANCE REVIEW - CURSOR USAGE **
c1 CURSOR
FOR
SELECT * FROM
f_employee
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0110 - FOR UPDATE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR UPDATE OF employee_number nowait;
BEGIN
OPEN C1;
--** SSC-PRF-0004 - THIS STATEMENT HAS USAGES OF CURSOR FOR LOOP **
FOR CREC IN C1 DO
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0136 - CURRENT OF CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
UPDATE f_employee
SET employee_number =
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! employee_number + 1000 WHERE CURRENT OF c1;
IF (crec.id = 2) THEN
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'CURRENT OF' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
-- DELETE FROM
-- f_employee
-- WHERE CURRENT OF c1
;
EXIT;
END IF;
END FOR;
CLOSE C1;
END;
$$;
SSC-EWI-OR0116
間隔の間の操作はサポートされていません
重大性
中
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
このエラーは、オペランドが間隔だけの算術演算がある場合に追加される。このような操作はSnowflakeでサポートされていません。
コード例
入力コード:
SELECT INTERVAL '1-1' YEAR(2) TO MONTH + INTERVAL '1-1' YEAR(2) + INTERVAL '1-1' YEAR(2) TO MONTH FROM dual;
SELECT INTERVALCOLUMN + INTERVAL '1-1' YEAR(2) TO MONTH FROM INTERVALTABLE;
生成されたコード:
SELECT
--INTERVAL '1-1 year' + INTERVAL '1y, 1mm' + INTERVAL '1y, 1mm'
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0116 - OPERATIONS BETWEEN INTERVALS ARE NOT SUPPORTED BY SNOWFLAKE ***/!!!
null
FROM dual;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!! INTERVALCOLUMN + INTERVAL '1y, 1mm'
FROM
INTERVALTABLE;
SSC-EWI-OR0118
組み込みのビュー/テーブルはSnowflakeではサポートされていません
説明
Oracleには 組み込みビューとテーブルのセット があり、Snowflakeには存在しません。SnowConvert AIでは、これらの要素を使用するクエリとステートメントにエラーメッセージが追加されます。
コード例
入力コード:
SELECT * FROM ALL_COL_COMMENTS;
SELECT * FROM (SELECT * FROM ALL_COL_COMMENTS);
生成されたコード:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0118 - TRANSLATION FOR ORACLE BUILT-IN TABLE/VIEW 'ALL_COL_COMMENTS' IS NOT CURRENTLY SUPPORTED. ***/!!!
* FROM
ALL_COL_COMMENTS;
SELECT * FROM (SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0118 - TRANSLATION FOR ORACLE BUILT-IN TABLE/VIEW 'ALL_COL_COMMENTS' IS NOT CURRENTLY SUPPORTED. ***/!!! * FROM
ALL_COL_COMMENTS);
SSC-EWI-OR0121
BFILE列へのDBMS_LOB.SUBSTR組み込みパッケージの使用は、Snowflakeではサポートされていません。
説明
OracleのBFILE列はSnowflakeのVARCHARに移行されます。ファイル名は新しい列に文字列として格納されます。したがって、SnowflakeでSUBSTR関数を使用すると、移行された列に対してファイル名の部分文字列が返されます。OracleのDBMS_LOB.SUBSTRはファイル内容の部分文字列を返します。詳細については、BFILEデータ型 をご参照ください。
コード例
入力コード:
CREATE TABLE table1
(
bfile_column BFILE
)
SELECT
DBMS_LOB.SUBSTR(bfile_column, 15, 1)
FROM table1;
生成されたコード:
CREATE OR REPLACE TABLE table1
(
bfile_column
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0121 - USING DBMS_LOB.SUBSTR ON BFILE SOURCE COLUMN IS NOT SUPPORTED ON SNOWFLAKE ***/!!!
SUBSTR(bfile_column, 1, 15)
FROM
table1;
SSC-EWI-OR0123
データベースリンク接続はサポートされていません
説明
データベースリンクとその参照がSnowflakeでサポートされていないため、オブジェクト名からデータベースリンク接続参照が削除されました。保存されるのは、 @ 文字の前の名前部分だけです。
コード例
入力コード:
-- Creation of the database link
CREATE DATABASE LINK mylink
CONNECT TO user1 IDENTIFIED BY password1
USING 'connection_str';
-- Statements that use the database link we created
SELECT * FROM employees@mylink;
INSERT INTO employees@mylink
(employee_id, last_name, email, hire_date, job_id)
VALUES (999, 'Claus', 'sclaus@oracle.com', SYSDATE, 'SH_CLERK');
UPDATE employees@mylink SET min_salary = 3000
WHERE job_id = 'SH_CLERK';
DELETE FROM employees@mylink
WHERE employee_id = 999;
生成されたコード:
---- Creation of the database link
----** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE DATABASE LINK mylink
-- CONNECT TO user1 IDENTIFIED BY password1
-- USING 'connection_str'
-- Statements that use the database link we created
SELECT * FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees;
INSERT INTO
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
(employee_id, last_name, email, hire_date, job_id)
VALUES (999, 'Claus', 'sclaus@oracle.com', CURRENT_TIMESTAMP(), 'SH_CLERK');
UPDATE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
SET min_salary = 3000
WHERE job_id = 'SH_CLERK';
DELETE FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
WHERE employee_id = 999;
ベストプラクティス
2つのDBリンクが同じ名前を共有し、コードが複数回移行された場合、EWIは、どのDBリンクが最初に処理されたかに基づいて、情報を変更することができます。すべてのDBリンクが異なる名前であることを確認することが重要です。
データベースリンク参照から、Snowflakeで使用されているのと同じデータベースインスタンスにデータベースオブジェクトを移動します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-OR0126
組み込みのカスタム型がサポートされていないため、使用できないオブジェクト
説明
このエラーは、カスタムタイプが組み込まれたオブジェクトが使用されているかどうかを示すために表示されます。
コード例
入力コード:
CREATE OR REPLACE PROCEDURE proc01 is
var1 DBMS_SQL.VARCHAR2_TABLE;
var2 CTX_CLS.DOC_TAB;
BEGIN
varX := var1.property;
varY := var2(1);
END;
生成されたコード:
CREATE OR REPLACE PROCEDURE proc01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 VARIANT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'DBMS_SQL.VARCHAR2_TABLE' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/;
var2 VARIANT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'CTX_CLS.DOC_TAB' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/;
BEGIN
varX := var1.property !!!RESOLVE EWI!!! /*** SSC-EWI-OR0126 - UNUSABLE OBJECT var1, BUILT-IN CUSTOM TYPES ARE NOT SUPPORTED ***/!!!;
varY := var2(1) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0126 - UNUSABLE OBJECT var2, BUILT-IN CUSTOM TYPES ARE NOT SUPPORTED ***/!!!;
END;
$$;
SSC-EWI-OR0128
ブール値のカーソル属性はサポートされていません。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
このメッセージは、ブールのカーソル属性がSnowScriptでサポートされていないこと、またはSnowScriptでその機能をエミュレートする変換が存在しないことを示すために使用されます。以下の表は、エミュレート可能なブールのカーソル属性を示しています。
コード例
入力コード:
CREATE OR REPLACE PROCEDURE cursor_attributes_proc
IS
is_open_attr BOOLEAN;
found_attr BOOLEAN;
my_record table1%ROWTYPE;
CURSOR my_cursor IS SELECT * FROM table1;
BEGIN
OPEN my_cursor;
LOOP
FETCH my_cursor INTO my_record;
EXIT WHEN my_cursor%NOTFOUND;
is_open_attr := my_cursor%ISOPEN;
found_attr := my_cursor%FOUND;
END LOOP;
CLOSE my_cursor;
END;
生成されたコード:
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
CREATE OR REPLACE PROCEDURE cursor_attributes_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
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();
--** SSC-PRF-0009 - PERFORMANCE REVIEW - CURSOR USAGE **
my_cursor CURSOR
FOR
SELECT
OBJECT_CONSTRUCT( *) sc_cursor_record FROM
table1;
BEGIN
OPEN my_cursor;
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
LOOP
--** SSC-PRF-0003 - FETCH INSIDE A LOOP IS CONSIDERED A COMPLEX PATTERN, THIS COULD DEGRADE SNOWFLAKE PERFORMANCE. **
FETCH my_cursor INTO
:my_record;
IF (my_record IS NULL) THEN
EXIT;
END IF;
is_open_attr := null /*my_cursor%ISOPEN*/!!!RESOLVE EWI!!! /*** SSC-EWI-OR0128 - BOOLEAN CURSOR ATTRIBUTE %ISOPEN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!;
found_attr := my_record IS NOT NULL;
END LOOP;
CLOSE my_cursor;
END;
$$;
SSC-EWI-OR0129
TYPE属性を解決できませんでした。
重大性
低
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明
この警告は、 TYPE 属性の参照項目を解決できず、参照項目のデータ型を取得できなかった場合に表示されます。そのため、 VARIANT データ型が代わりに割り当てられます。
コード例
入力コード:
CREATE OR REPLACE PROCEDURE procedure01
IS
var1 table01.col1%TYPE;
BEGIN
NULL;
END;
生成されたコード:
CREATE OR REPLACE PROCEDURE procedure01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-OR0129 - TYPE ATTRIBUTE 'table01.col1%TYPE' COULD NOT BE RESOLVED, SO IT WAS TRANSFORMED TO VARIANT ***/!!!;
BEGIN
NULL;
END;
$$;
SSC-EWI-OR0133
カーソル変数はすでに割り当てられています
説明
OPEN FOR ステートメントが変換されると、入力コードで使用されているカーソル変数と同じ名前のカーソル割り当てが、その機能をエミュレートするために他のステートメントと共に追加されます。同じカーソル変数で複数の OPEN FOR ステートメントを使用することが可能であるため、出力コードには同じ名前のカーソル割り当てが複数存在することになります。出力コードをそのままにしておくと、Snowflakeで実行したときにコンパイルエラーが発生します。
コード例
入力コード
CREATE OR REPLACE PROCEDURE open_for_procedure
AS
query1 VARCHAR(200) := 'SELECT 123 FROM dual';
query2 VARCHAR(200) := 'SELECT 456 FROM dual';
my_cursor_variable SYS_REFCURSOR;
BEGIN
OPEN my_cursor_variable FOR query1;
OPEN my_cursor_variable FOR query2;
END;
生成コード
CREATE OR REPLACE PROCEDURE open_for_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
query1 VARCHAR(200) := 'SELECT 123 FROM dual';
query2 VARCHAR(200) := 'SELECT 456 FROM dual';
my_cursor_variable_res RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
my_cursor_variable_res := (
EXECUTE IMMEDIATE :query1
);
LET my_cursor_variable CURSOR
FOR
my_cursor_variable_res;
OPEN my_cursor_variable;
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
my_cursor_variable_res := (
EXECUTE IMMEDIATE :query2
);
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0133 - THE CURSOR VARIABLE NAMED 'my_cursor_variable' HAS ALREADY BEEN ASSIGNED IN ANOTHER CURSOR ***/!!!
LET my_cursor_variable CURSOR
FOR
my_cursor_variable_res;
OPEN my_cursor_variable;
END;
$$;
SSC-EWI-OR0135
データ保持期間によって結果が生成されない可能性があります
説明
Time Travelを使ってSnowflakeでクエリを実行した場合、指定した時間がデータ保持期間の範囲から外れていると、結果が返されない可能性があります。SnowflakeのTime Travel の詳細をご確認いただくことをお勧めします。
コード例
入力コード
SELECT * FROM employees
AS OF TIMESTAMP
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE last_name = 'SampleName';
生成コード
SELECT * FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0135 - DATA RETENTION PERIOD MAY PRODUCE NO RESULTS ***/!!!
AT (TIMESTAMP =>
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS'))
WHERE last_name = 'SampleName';
SSC-EWI-OR0136
SnowflakeではCurrent of句はサポートされていません
説明
UPDATEやDELETEのように、WHERE句の中にCURRENT OF句を使用できるステートメントもありますが、これは現在Snowflakeではサポートされていません。
コード例
Oracle:
CREATE OR REPLACE PROCEDURE proc_update_current_of
AS
CURSOR C1
IS
SELECT * FROM F_EMPLOYEE FOR UPDATE OF SALARY nowait;
BEGIN
FOR CREC IN C1
LOOP
UPDATE F_EMPLOYEE SET SALARY=SALARY+2000 WHERE CURRENT OF C1;
END LOOP;
END;
Snowflake Scripting:
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "F_EMPLOYEE" **
CREATE OR REPLACE PROCEDURE proc_update_current_of ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
--** SSC-PRF-0009 - PERFORMANCE REVIEW - CURSOR USAGE **
C1 CURSOR
FOR
SELECT * FROM
F_EMPLOYEE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0110 - FOR UPDATE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR UPDATE OF SALARY nowait;
BEGIN
OPEN C1;
--** SSC-PRF-0004 - THIS STATEMENT HAS USAGES OF CURSOR FOR LOOP **
FOR CREC IN C1 DO
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0136 - CURRENT OF CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
UPDATE F_EMPLOYEE
SET SALARY=
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!SALARY+2000 WHERE CURRENT OF C1;
END FOR;
CLOSE C1;
END;
$$;
SSC-EWI-OR0137
型属性参照がサポートされていない可能性があるため、Variantデータ型に変換されました。
説明
TYPE ATTRIBUTE 'TYPEUSED%TYPE' MIGHT BE UNSUPPORTED, SO IT WAS TRANSFORMED TO VARIANT
コード例
Oracle:
CREATE OR REPLACE TABLE MYTABLE
(
LOG_ID URITYPE
);
CREATE OR REPLACE PROCEDURE some_procedure()
IS
L_MESSAGE MYTABLE.LOG_ID%TYPE;
BEGIN
NULL;
END;
Snowflake Scripting:
CREATE OR REPLACE TABLE MYTABLE
(
!!!RESOLVE EWI!!! /*** SSC-EWI-0028 - TYPE NOT SUPPORTED BY SNOWFLAKE ***/!!!
LOG_ID URITYPE
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "10/01/2025", "domain": "no-domain-provided", "migrationid": "aqCZAdErg3K0P04NglqCCg==" }}'
;
CREATE OR REPLACE PROCEDURE some_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "10/01/2025", "domain": "no-domain-provided", "migrationid": "aqCZAdErg3K0P04NglqCCg==" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
L_MESSAGE VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-OR0137 - TYPE ATTRIBUTE 'MYTABLE.LOG_ID%TYPE' MIGHT BE UNSUPPORTED, SO IT WAS TRANSFORMED TO VARIANT ***/!!!;
BEGIN
NULL;
END;
$$;
SSC-EWI-OR0138
STANDARD_HASH with dynamic algorithm parameter cannot be converted.
説明
This error is added when the STANDARD_HASH function uses a dynamic (non-literal) algorithm parameter, such as a variable or expression. SnowConvert AI cannot determine the target hash function at compile time because the algorithm must be a string literal ('SHA1', 'SHA256', 'SHA384', 'SHA512', or 'MD5').
The function is left unconverted and the user must manually resolve the algorithm at runtime.
コード例
Oracle:
SELECT STANDARD_HASH(col1, algorithm_var) FROM table1;
Snowflake Scripting:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0138 - STANDARD_HASH WITH DYNAMIC ALGORITHM PARAMETER CANNOT BE CONVERTED. THE ALGORITHM MUST BE A STRING LITERAL (SHA1, SHA256, SHA384, SHA512, OR MD5). ***/!!!
STANDARD_HASH(col1, algorithm_var)
FROM
table1;
関連 EWI
SSC-FDM-OR0032: StandardHash function with input non-string parameter generates a different result in Snowflake.
ベストプラクティス
Replace the dynamic algorithm parameter with a string literal (e.g., 'SHA256') so SnowConvert AI can determine the correct Snowflake hash function.
If the algorithm must be dynamic at runtime, manually convert the STANDARD_HASH call to a CASE expression that maps each algorithm to the corresponding Snowflake function (SHA1, SHA2, MD5).
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。