SnowConvert AI - Oracle - SQLステートメント¶
この文書では、SQL構文におけるすべての類似点、相違点、そしてSnowConvert AIがこれらのSQL構文をどのように機能的なSnowflake SQL構文に変換するかについて詳述します。
テーブルを変更¶
このセクションでは、ALTER TABLEに関連する変換を紹介します。
注釈
わかりやすくするため、出力コードの一部を省略しています。
1.説明¶
パーティショニングされていないテーブル、パーティショニングされたテーブル、テーブルパーティション、テーブルサブパーティションの定義を変更するには、 ALTER TABLE ステートメントを使用します。オブジェクトテーブルやオブジェクト列を持つリレーショナルテーブルの場合、ALTER TABLE を使用して、型が変更された後に参照される型の最新の定義にテーブルを変換します(Oracleドキュメント)。
Oracle構文
ALTER TABLE [ schema. ] table
[ alter_table_properties
| column_clauses
| constraint_clauses
| alter_table_partitioning
| alter_external_table
| move_table_clause
]
[ enable_disable_clause
| { ENABLE | DISABLE } { TABLE LOCK | ALL TRIGGERS }
] ...
;
注釈
Snowflakeの構文を確認するには、以下の ドキュメント を参照してください。
2.サンプルソースパターン¶
2.1.句によるテーブルの変更¶
警告
memoptimize_read_clause、 memoptimize_read_clause はSnowflakeでは適用できないため削除されます。
Oracle¶
ALTER TABLE SOMESCHEMA.SOMENAME
MEMOPTIMIZE FOR READ
MEMOPTIMIZE FOR WRITE
ADD (SOMECOLUMN NUMBER , SOMEOTHERCOLUMN VARCHAR(23))
(PARTITION PT NESTED TABLE COLUMN_VALUE STORE AS SNAME
( SUBPARTITION SPART NESTED TABLE COLUMN_VALUE STORE AS SNAME))
ENABLE TABLE LOCK;
Snowflake¶
ALTER TABLE SOMESCHEMA.SOMENAME
ADD (SOMECOLUMN NUMBER(38, 18), SOMEOTHERCOLUMN VARCHAR(23));
注釈
Snowflakeでは、 column_clausesとconstraint_clauses の一部のみが適用可能です。Oracleのテーブル変更では、作成されたパーティションからプロパティを変更できますが、Snowflakeではこれらのアクションは必要ありません
2.2.サポートされていないケースでのテーブルの変更¶
Oracle¶
ALTER TABLE SOMENAME MODIFY COLUMN SCOLUMN NOT SUBSTITUTABLE AT ALL LEVELS FORCE;
ALTER TABLE SOMENAME MODIFY(SCOLUMN VISIBLE,SCOLUMN INVISIBLE);
ALTER TABLE SOMENAME MODIFY VARRAY VARRAYITEM (
STORAGE(PCTINCREASE 10));
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE SOMENAME
MODIFY COLUMN SCOLUMN NOT SUBSTITUTABLE AT ALL LEVELS FORCE;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE SOMENAME
MODIFY(SCOLUMN VISIBLE,SCOLUMN INVISIBLE);
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE SOMENAME
MODIFY VARRAY VARRAYITEM (
STORAGE(PCTINCREASE 10));
2.3.ADD CONSTRAINT アクション¶
ADD CONSTRAINT アクションはSnowflakeで同等の機能を持っていますが、ALTER TABLE ステートメントごとに1つの制約しか追加できないため、ステートメントに2つ以上の制約が含まれる場合はコメントされます。
警告
enable_disable_clause は、Snowflakeでは関係ないため削除されます。
Oracle¶
-- MULTIPLE CONSTRAINT ADDITION SCENARIO
ALTER TABLE TABLE1 ADD (
CONSTRAINT TABLE1_PK
PRIMARY KEY
(ID)
ENABLE VALIDATE,
CONSTRAINT TABLE1_FK foreign key(ID2)
references TABLE2 (ID) ON DELETE CASCADE);
-- ONLY ONE CONSTRAINT ADDITION SCENARIO
ALTER TABLE TABLE1 ADD (
CONSTRAINT TABLE1_FK foreign key(ID2)
references TABLE2 (ID) ON DELETE CASCADE);
Snowflake¶
-- MULTIPLE CONSTRAINT ADDITION SCENARIO
!!!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);
-- ONLY ONE CONSTRAINT ADDITION SCENARIO
ALTER TABLE TABLE1
ADD
CONSTRAINT TABLE1_FK foreign key(ID2)
references TABLE2 (ID) ON DELETE CASCADE;
既知の問題¶
テーブルのプロパティによっては、適応されるもの、または適用できないものがあります。
データベースリンクの作成¶
警告
現在、_ データベースリンクの作成 _ ステートメントは変換されていませんが、解析されています。また、ソースコードに データベースリンクの作成 ステートメントがある場合、それらは _ 評価レポート _ に記載されます。
ソースコードの例¶
CREATE PUBLIC DATABASE LINK db_link_name
CONNECT TO CURRENT_USER
USING 'connect string'
CREATE DATABASE LINK db_link_name2
CONNECT TO user_name IDENTIFIED BY user_password
USING 'connect string'
CREATE PUBLIC DATABASE LINK db_link_name3
Snowflakeの出力¶
----** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE PUBLIC DATABASE LINK db_link_name
--CONNECT TO CURRENT_USER
--USING 'connect string'
----** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE DATABASE LINK db_link_name2
--CONNECT TO user_name IDENTIFIED BY user_password
--USING 'connect string'
----** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE PUBLIC DATABASE LINK db_link_name3
データベースリンクリファレンス¶
入力コードでデータベースリンクのオブジェクトを使用した場合、出力コードではこれらのオブジェクトの名前は保持されますが、それらが使用しているデータベースリンクの名前は削除されます。
ソースコードの例¶
-- CREATE DATABASE LINK STATEMENTS
CREATE DATABASE LINK mylink1
CONNECT TO user1 IDENTIFIED BY password1
USING 'my_connection_string1';
CREATE DATABASE LINK mylink2
CONNECT TO user2 IDENTIFIED BY password2
USING 'my_connection_string2';
-- SQL statements that use the database links
SELECT * FROM products@mylink1;
INSERT INTO employees@mylink2
(employee_id, last_name, email, hire_date, job_id)
VALUES (999, 'Claus', 'sclaus@oracle.com', SYSDATE, 'SH_CLERK');
UPDATE jobs@mylink2 SET min_salary = 3000
WHERE job_id = 'SH_CLERK';
DELETE FROM employees@mylink2
WHERE employee_id = 999;
-- SQL statement where it uses an object from
-- a database link that is not created
SELECT * FROM products@mylink;
Snowflakeの出力¶
---- CREATE DATABASE LINK STATEMENTS
----** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE DATABASE LINK mylink1
-- CONNECT TO user1 IDENTIFIED BY password1
-- USING 'my_connection_string1'
----** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE DATABASE LINK mylink2
-- CONNECT TO user2 IDENTIFIED BY password2
-- USING 'my_connection_string2'
-- SQL statements that use the database links
SELECT * FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink1 | USER: user1/password1 | CONNECTION: 'my_connection_string1' ] ***/!!!
products;
INSERT INTO
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink2 | USER: user2/password2 | CONNECTION: 'my_connection_string2' ] ***/!!!
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 : mylink2 | USER: user2/password2 | CONNECTION: 'my_connection_string2' ] ***/!!!
jobs
SET min_salary = 3000
WHERE job_id = 'SH_CLERK';
DELETE FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink2 | USER: user2/password2 | CONNECTION: 'my_connection_string2' ] ***/!!!
employees
WHERE employee_id = 999;
-- SQL statement where it uses an object from
-- a database link that is not created
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "mylink" **
SELECT * FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: / | CONNECTION: ] ***/!!!
products;
関連 EWIs¶
SSC-EWI-OR0123 :DBリンク接続はサポートされていません。
SSC-FDM-0007 :依存関係が欠落している要素。
テーブルを削除¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
テーブルを削除するには、テーブルの削除ステートメントを使用します。このステートメントは、Oracle と Snowflake で少し異なります。相違点の詳細については、各ドキュメントを再確認してください。
Oracleでは、テーブルの削除の構文は次のようになります。
DROP TABLE <table_name> [ CASCADE CONSTRAINTS ] [ PURGE ]
Snowflakeでは、テーブルの削除の構文は次のようになります。
DROP TABLE [ IF EXISTS ] <table_name> [ CASCADE | RESTRICT ]
主な違いは、テーブルがシステムから永久に削除されないため、Snowflakeには PURGE 句のイコールがないことです。ただし、CASCADE CONSTRAINTS と CASCADE 句は 同じです。どちらも、このテーブルを参照する外部キーが存在しても、テーブルを削除します。
例¶
それでは、コードの例と、変換後のコードを見てみましょう。各例では、テーブルの削除ステートメントの異なるバリエーションを使用しています。
例1:¶
この例では、 テーブルの削除 ステートメントをできるだけシンプルに使用しています。
入力コード:
DROP TABLE TEST_TABLE1;
変換後のコード:
DROP TABLE TEST_TABLE1;
例2:¶
この例では、 テーブルの削除 ステートメントと PURGE 句を使用しています。Snowflakeには、テーブルの削除ステートメント内の PURGE 句に相当するものがないことを覚えておいてください。
入力コード:
DROP TABLE TEST_TABLE1 PURGE;
変換後のコード:
DROP TABLE TEST_TABLE1;
例3:¶
この例では、 テーブルの削除 ステートメントと CASCADE CONSTRAINTS 句を使用しています。
入力コード:
DROP TABLE TEST_TABLE1 CASCADE CONSTRAINTS;
変換後のコード:
DROP TABLE TEST_TABLE1 CASCADE;
変換後のコードでは、CASCADE CONSTRAINTS 句から CONSTRAINTS の単語が削除されています。
例4:¶
この例では、 テーブルの削除 ステートメントと、CASCADE CONSTRAINTS および PURGE 句を使用しています。
入力コード:
DROP TABLE TEST_TABLE1 CASCADE CONSTRAINTS PURGE;
変換後のコード:
DROP TABLE TEST_TABLE1 CASCADE;
ご覧のように、コードが変わります。新しいSnowflakeコードでは、PURGE 句が削除され、CASCADE 句から CONSTRAINTS の単語も削除されています。
機能的等価性¶
機能的に同等であるかどうかを確認するには、次のコードを実行します。同等でない唯一の部分は PURGE 句であることに注意してください。Oracleでは、この句によってシステムからテーブルが完全に削除され、Snowflakeには同等のものが存在しません。どちらの場合も、テーブルが他のテーブルで参照されていても、そのテーブルは削除されます。
Oracle:
CREATE TABLE TEST_TABLE2 (
col2 INTEGER,
CONSTRAINT constraint_name PRIMARY KEY (col2)
);
CREATE TABLE OTHER_TABLE (
other_col INTEGER REFERENCES TEST_TABLE2 (col2)
);
DROP TABLE TEST_TABLE2 CASCADE CONSTRAINTS PURGE;
Snowflake:
CREATE OR REPLACE TABLE TEST_TABLE2 (
col2 INTEGER,
CONSTRAINT constraint_name PRIMARY KEY (col2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE TABLE OTHER_TABLE (
other_col INTEGER REFERENCES TEST_TABLE2 (col2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
DROP TABLE TEST_TABLE2 CASCADE;
関連 EWIs¶
関連 EWIs はありません。
インデックスの作成¶
警告
現在、_ Create Index _ ステートメントは変換されていませんが、解析されています。また、ソースコードにCreate index ステートメントがある場合、_ Assessment Report _ ではこれらも考慮されます。
インデックスの作成 を解析したコードの例:¶
CREATE UNIQUE INDEX COL1_INDEX ILM (ADD POLICY OPTIMIZE AFTER 10 DAYS OF NO ACCESS) ON CLUSTER CLUSTER1
ONLINE USABLE DEFERRED INVALIDATION;
CREATE BITMAP INDEX COL1_INDEX ILM (ADD POLICY OPTIMIZE ( ON FUNC1 )) ON TABLE1 AS TAB1 (COL1 ASC) GLOBAL PARTITION BY RANGE (COL1, COL2) ( PARTITION VALUES LESS THAN (MAXVALUE) ) UNUSABLE IMMEDIATE INVALIDATION;
CREATE MULTIVALUE INDEX COL1_INDEX ILM (ADD POLICY SEGMENT TIER TO LOW_COST_TBS) ON TABLE1( TAB1 COL1 DESC, TAB1 COL2 ASC) FROM TABLE1 AS TAB1 WHERE COL1 > 0 LOCAL STORE IN (STORAGE1)
VISIBLE USABLE DEFERRED INVALIDATION;
CREATE INDEX COL1_INDEX ILM (DELETE POLICY POLICY1) ON CLUSTER CLUSTER1
PCTFREE 10
LOGGING
ONLINE
TABLESPACE DEFAULT
NOCOMPRESS
SORT
REVERSE
VISIBLE
INDEXING PARTIAL
NOPARALLEL;
CREATE INDEX COL1_INDEX ILM (DELETE_ALL) ON TABLE1 AS TAB1 (COL1 ASC) LOCAL (
PARTITION PARTITION1 TABLESPACE TABLESPACE1 NOCOMPRESS USABLE) DEFERRED INVALIDATION;
CREATE INDEX COL1_INDEX ON TABLE1 (COL1 ASC) GLOBAL
PARTITION BY HASH (COL1, COL2) (PARTITION PARTITION1 LOB(LOB1) STORE AS BASICFILE LOB_NAME (TABLESPACE TABLESPACE1)) USABLE IMMEDIATE INVALIDATION;
CREATE INDEX COL1_INDEX ON TABLE1 (COL1 DESC, COL2 ASC) INDEXTYPE IS INDEXTYPE1 LOCAL ( PARTITION PARTITION1 PARAMETERS('PARAMS')) NOPARALLEL PARAMETERS('PARAMS') USABLE DEFERRED INVALIDATION;
CREATE INDEX COL1_INDEX ON TABLE1 (COL1 ASC) INDEXTYPE IS XDB.XMLINDEX LOCAL ( PARTITION PARTITION1) PARALLEL 6 UNUSABLE IMMEDIATE INVALIDATION;
注釈
アーキテクチャ上の理由により、Snowflakeはインデックスをサポートしていないため、SnowConvert AIはインデックスの作成に関連するすべてのコードを削除します。Snowflakeは、各テーブルに、DML操作のパフォーマンスを高速化するマイクロパーティションを自動的に作成します。ユーザーはこれらのマイクロパーティションの作成や管理を心配する必要はありません。
通常、これだけで非常に優れたクエリパフォーマンスが得られます。しかし、データクラスタリングキーを作成することで改善する方法があります。Snowflakeの公式ページ には、マイクロパーティションとデータクラスタリングに関する詳細情報が掲載されています。
シーケンスを作成¶
まずはコード例と、変換後のコードを見てみましょう。
Oracle:¶
CREATE SEQUENCE SequenceSample
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
Snowflake:¶
CREATE OR REPLACE SEQUENCE SequenceSample
START WITH 1000
INCREMENT BY 1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
The first change that it is done is to apply the schema or datawarehouse to the name of the sequence. The second transformation consists in removing some elements and add them as comments, since oracle has some elements in the create sequence that are not supported in snowflake.
Oracleでは、シーケンス名の後に、NOT コメントされる要素は以下の通りです
START WITH 1000
INCREMENT BY 1
これらの要素でない場合は、コメントされ、例のように作成シーケンスの直前に警告として追加されます。
削除されるのは以下の要素です
MAXVALUE
NOMAXVALUE
MINVALUE
NOMINVALUE
CYCLE
NOCYCLE
CACHE
NOCACHE
ORDER
NOORDER
KEEP
NOKEEP
SESSION
GLOBAL
SCALE
EXTEND
SCALE
NOEXTEND
NOSCALE
SHARD
EXTEND
SHARD
NOEXTEND
NOSHARD
SEQUENCE EXPRESSIONS¶
NEXTVAL:Snowflakeの文法はOracleの文法と同じです。
CURRVAL: Snowflake does not have an equivalent so it is transformed to a stub function. Check this link to understand Snowflake's approach.
Oracle:¶
select seq1.nextval from dual;
select seq1.currval from dual;
Snowflake:¶
select seq1.nextval from dual;
select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0069 - THE SEQUENCE CURRVAL PROPERTY IS NOT SUPPORTED IN SNOWFLAKE. ***/!!! seq1.currval from dual;
シーケンス START WITH¶
START WITH ステートメントの値は、Snowflakeが許容する最大値を超える場合があります。Snowflakeが開始値について述べていることは次の通りです: シーケンスによって返される最初の値を指定します。サポートされる値は、64ビットの2の補数整数(-2^63 から 2^63-1) で表現できる値です。従って、先に述べたところによると、許容される最大値は、正の数の場合は 9223372036854775807 で、負の数の場合は 9223372036854775808 となります。
コード例¶
Oracle:¶
CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Snowflake:¶
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"}}';
関連 EWIs¶
SSC-EWI-OR0069 :シーケンスCURRVALプロパティはSnowflakeではサポートされていません。
SSC-EWI-OR0068 :シーケンス開始値がSnowflakeで許容される最大値を超えています。
セッションを変更¶
セッションを変更¶
セッションの変更はSnowflakeで同等の機能を持っており、いくつかの変数はSnowflake変数にマッピングされています。セッションの変更の順列がサポートされていない場合、そのノードはコメントされ、警告が追加されます。
Oracle:¶
alter session set nls_date_format = 'DD-MM-YYYY';
Snowflake:¶
ALTER SESSION SET DATE_INPUT_FORMAT = 'DD-MM-YYYY' DATE_OUTPUT_FORMAT = 'DD-MM-YYYY';
セッションパラメーターリファレンス¶
注釈
テーブルに表示されていないセッションパラメーターは、現在変換されていません。
セッションパラメーター |
Snowflake変換 |
|---|---|
NLS_DATE_FORMAT |
DATE_INPUT_FORMAT および DATE_OUTPUT_FORMAT |
NLS_NUMERIC_CHARACTERS |
NOT SUPPORTED |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連 EWIs はありません。
同義語の作成¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
同義語の作成¶
同義語はSnowflakeではサポートされていません。同義語への参照は、元のオブジェクトに対して変更されます。
Oracle:¶
CREATE OR REPLACE SYNONYM B.TABLITA_SYNONYM FOR TABLITA;
Snowflake:¶
----** 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.TABLITA_SYNONYM FOR TABLITA
;
例1:テーブルを指す同義語。¶
Oracleのソースコード:
CREATE TABLE TABLITA
(
COLUMN1 NUMBER
);
CREATE OR REPLACE SYNONYM B.TABLITA_SYNONYM FOR TABLITA;
SELECT * FROM B.TABLITA_SYNONYM WHERE B.TABLITA_SYNONYM.COLUMN1 = 20;
Snowflakeが移行したコード: SELECT は元々同義語を参照していましたが、現在は同義語を指すテーブルを参照していることがわかります。
CREATE OR REPLACE TABLE TABLITA
(
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.TABLITA_SYNONYM FOR TABLITA
;
SELECT * FROM
TABLITA
WHERE
TABLITA.COLUMN1 = 20;
例2他の同義語を指す同義語。¶
Oracleのソースコード:
CREATE TABLE TABLITA
(
COLUMN1 NUMBER
);
CREATE OR REPLACE SYNONYM B.TABLITA_SYNONYM FOR TABLITA;
CREATE OR REPLACE SYNONYM C.TABLITA_SYNONYM2 FOR B.TABLITA_SYNONYM;
SELECT * FROM C.TABLITA_SYNONYM2 WHERE C.TABLITA_SYNONYM2.COLUMN1 = 20;
UPDATE C.TABLITA_SYNONYM2 SET COLUMN1 = 10;
INSERT INTO C.TABLITA_SYNONYM2 VALUES (1);
Snowflakeが移行したコード:元々、 SELECT 、 UPDATE 、 INSERT は同義語を指していましたが、現在はテーブルであるアトミックオブジェクトを指していることがわかります。
CREATE OR REPLACE TABLE TABLITA
(
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.TABLITA_SYNONYM FOR TABLITA
;
-- --** SSC-FDM-OR0005 - SYNONYMS NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS SYNONYM WERE CHANGED BY THE ORIGINAL OBJECT NAME. **
--CREATE OR REPLACE SYNONYM C.TABLITA_SYNONYM2 FOR B.TABLITA_SYNONYM
;
SELECT * FROM
TABLITA
WHERE
TABLITA.COLUMN1 = 20;
UPDATE TABLITA
SET COLUMN1 = 10;
INSERT INTO TABLITA
VALUES (1);
例3 :ビューを指す同義語¶
Oracleソースコード
CREATE OR REPLACE SYNONYM B.TABLITA_SYNONYM FOR TABLITA;
CREATE OR REPLACE SYNONYM C.TABLITA_SYNONYM2 FOR B.TABLITA_SYNONYM;
CREATE VIEW VIEW_ORGINAL AS SELECT * FROM C.TABLITA_SYNONYM2;
CREATE OR REPLACE SYNONYM VIEW_SYNONYM FOR VIEW_ORGINAL;
SELECT * FROM VIEW_SYNONYM;
Snowflakeが移行したコード: SELECT は元々同義語を指していましたが、現在はビューであるアトミックオブジェクトを指していることがわかります。
----** 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.TABLITA_SYNONYM FOR TABLITA
;
----** SSC-FDM-OR0005 - SYNONYMS NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS SYNONYM WERE CHANGED BY THE ORIGINAL OBJECT NAME. **
--CREATE OR REPLACE SYNONYM C.TABLITA_SYNONYM2 FOR B.TABLITA_SYNONYM
;
CREATE OR REPLACE VIEW VIEW_ORGINAL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT * FROM
TABLITA;
----** SSC-FDM-OR0005 - SYNONYMS NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS SYNONYM WERE CHANGED BY THE ORIGINAL OBJECT NAME. **
--CREATE OR REPLACE SYNONYM VIEW_SYNONYM FOR VIEW_ORGINAL
;
SELECT * FROM
VIEW_ORGINAL;
関連 EWIs¶
SSC-FDM-0001: 単一のテーブルからすべての列を選択するビューはSnowflakeでは必要ありません。
SSC-FDM-0006 :数値型の列はSnowflakeでは同様の動作をしない場合があります。
SSC-FDM-OR0005 :同義語はSnowflakeではサポートされていませんが、この同義語への参照は元のオブジェクト名で変更されました。