SnowConvert AI - Oracle - Instructions SQL¶
Ce document détaille l’ensemble des similitudes, des différences dans les syntaxes SQL et montre comment SnowConvert AI traduirait ces syntaxes SQL dans une syntaxe Snowflake SQL fonctionnelle.
Alter Table¶
Cette section vous montre les traductions relatives à ALTER TABLE.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
1. Description¶
Utilisez l’instruction ALTER TABLE pour modifier la définition d’une table non partitionnée, d’une table partitionnée, d’une partition de table ou d’une sous-partition de table. Pour les tables d’objets ou les tables relationnelles avec des colonnes d’objets, utilisez ALTER TABLE pour convertir la table à la dernière définition de son type référencé après que le type a été modifié (Documentation Oracle).
Syntaxe 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 }
] ...
;
Note
Pour connaître la syntaxe Snowflake, consultez la documentation suivante.
2. Sample Source Patterns¶
2.1. Alter table avec des clauses¶
Avertissement
memoptimize_read_clause et memoptimize_read_clause ne sont pas applicables dans Snowflake et sont donc supprimées.
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));
Note
Seuls certaines column_clauses et constraint_clauses sont applicables dans Snowflake. Dans Oracle, table alter permet de modifier les propriétés des partitions créées, mais dans Snowflake, ces actions ne sont pas nécessaires
2.2. Alter table avec cas non pris en charge¶
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. Action ADDCONSTRAINT¶
L’action ADD CONSTRAINT a un équivalent dans Snowflake, mais elle ne permet d’ajouter qu’une seule contrainte par instruction ALTER TABLE. Elle sera donc commentée lorsque l’instruction contient deux contraintes ou plus.
Avertissement
enable_disable_clause est supprimée car elle n’est pas pertinente dans 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;
Problèmes connus¶
Certaines propriétés figurant dans les tables peuvent être adaptées ou ne pas être applicables.
Create Database Link¶
Avertissement
Actuellement, l’instruction _ Create Database Link _ n’est pas convertie mais elle est analysée. En outre, si votre code source contient des instructionscreate base de données link, celles-ci seront prises en compte dans le _ Rapport d’évaluation. _
Exemple de code source¶
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
Sortie 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
Références des liens de base de données¶
Si, dans votre code d’entrée, vous utilisez des objets du lien de la base de données, le code de sortie conservera le nom de ces objets, mais le nom du lien de la base de données qu’ils utilisent sera supprimé.
Exemple de code source¶
-- 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;
Sortie 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 connexes¶
SSC-EWI-OR0123: Connexions Db Link non prises en charge.
SSC-FDM-0007: Élément avec des dépendances manquantes.
Drop Table¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
L’instruction Drop Table permet de supprimer une table. Cette instruction varie quelque peu entre Oracle et Snowflake. Veuillez vérifier chaque documentation pour plus d’informations sur les différences.
Dans Oracle, la syntaxe Drop Table est la suivante :
DROP TABLE <table_name> [ CASCADE CONSTRAINTS ] [ PURGE ]
Dans Snowflake, la syntaxe Drop Table est la suivante :
DROP TABLE [ IF EXISTS ] <table_name> [ CASCADE | RESTRICT ]
La principale différence est que Snowflake n’a pas de clause égale pour PURGE, car la table ne sera pas définitivement supprimée du système. Cependant, les clauses CASCADE CONSTRAINTS et CASCADE sont les mêmes. Tous deux suppriment la table, même s’il existe des clés étrangères qui font référence à cette table.
Exemples¶
Voyons maintenant quelques exemples de code, et ce à quoi il ressemblerait après avoir été transformé. Chaque exemple utilise une variante différente de l’instruction Drop Table.
Exemple 1 :¶
Cet exemple utilise l’instruction Drop Table aussi simple que possible.
Code d’entrée :
DROP TABLE TEST_TABLE1;
Code transformé :
DROP TABLE TEST_TABLE1;
Exemple 2 :¶
Cet exemple utilise l’instruction Drop Table avec la clause PURGE. Rappelez-vous qu’il n’y a pas d’équivalent dans Snowflake pour la clause PURGE à l’intérieur d’une instruction Drop Table.
Code d’entrée :
DROP TABLE TEST_TABLE1 PURGE;
Code transformé :
DROP TABLE TEST_TABLE1;
Exemple 3 :¶
Cet exemple utilise l’instruction Drop Table avec la clause CASCADE CONSTRAINTS.
Code d’entrée :
DROP TABLE TEST_TABLE1 CASCADE CONSTRAINTS;
Code transformé :
DROP TABLE TEST_TABLE1 CASCADE;
Dans le code transformé, le mot CONSTRAINTS est supprimé de la clause CASCADE CONSTRAINTS.
Exemple 4 :¶
Cet exemple utilise l’instruction Drop Table avec les clauses CASCADE CONSTRAINTS et PURGE.
Code d’entrée :
DROP TABLE TEST_TABLE1 CASCADE CONSTRAINTS PURGE;
Code transformé :
DROP TABLE TEST_TABLE1 CASCADE;
Comme on l’a vu, le code change. Dans le nouveau code Snowflake, la clause PURGE est supprimée et le mot CONSTRAINTS est également supprimé de la clause CASCADE.
Équivalence fonctionnelle¶
Exécutez le code suivant pour vérifier l’équivalence fonctionnelle. Gardez à l’esprit que la seule partie qui n’est pas équivalente est la clause PURGE, qui, dans Oracle, supprime complètement la table du système et qu’il n’y a pas d’équivalent pour Snowflake. Dans les deux cas, la table est supprimée même si elle est référencée dans une autre table.
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 connexes¶
Pas d’EWIs connexes.
Create Index¶
Avertissement
Actuellement, l’instruction _ Create Index _ n’est pas convertie mais elle est analysée. De même, si votre code source comporte des instructions create index, celles-ci seront prises en compte dans le _ rapport d’évaluation. _
Exemple de code de create index analysé :¶
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;
Note
Pour des raisons architecturales, Snowflake ne prend pas en charge les index donc, SnowConvert AI supprimera tout le code lié à la création des index. Snowflake crée automatiquement des micropartitions pour chaque table, ce qui permet d’accélérer les performances des opérations DML. L’utilisateur n’a pas à se soucier de créer ou de gérer ces micro-partitions.
En général, cela suffit pour obtenir une performance de requête exceptionnellement bonne. Cependant, il existe des moyens de l’améliorer en créant des clés de clustering de données. La page officielle de Snowflake fournit de plus amples informations sur les micropartitions et le clustering de données.
Create Sequence¶
Voyons d’abord un exemple de code et ce à quoi il ressemblerait après avoir été transformé.
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"}}';
La première modification apportée consiste à appliquer le schéma ou l’entrepôt de données au nom de la séquence. La deuxième transformation consiste à supprimer certains éléments et à les ajouter en tant que commentaires, étant donné qu’oracle possède certains éléments dans la séquence de création qui ne sont pas pris en charge par le support Snowflake.
Dans Oracle, après le nom de la séquence, les éléments qui font l’objet d’un commentaire sur NOT sont les suivants
START WITH 1000
INCREMENT BY 1
Si l’élément n’en fait pas partie, il sera commenté et ajouté en tant qu’avertissement juste avant la séquence de création, comme dans l’exemple.
Les éléments suivants sont supprimés
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 : La grammaire Snowflake est la même que celle d’Oracle.
CURRVAL : Snowflake n’a pas d’équivalent, elle est donc transformée en une fonction stub. Consultez ce lien pour comprendre l’approche de Snowflake.
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;
Séquence START WITH¶
La valeur de l’instruction START WITH peut dépasser la valeur maximale autorisée par Snowflake. Voici ce que dit Snowflake à propos de la valeur de départ : Spécifiez la première valeur retournée par la séquence. Les valeurs prises en charge sont toutes les valeurs qui peuvent être représentées par un entier de 64 bits à deux compléments (de -2^63 à 2^63-1). Ainsi, d’après ce qui précède, la valeur maximale autorisée est 9223372036854775807 pour les nombres positifs et 9223372036854775808 pour les nombres négatifs.
Exemple de code¶
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 connexes¶
SSC-EWI-OR0069: La propriété CURRVAL de la séquence n’est pas prise en charge dans Snowflake.
SSC-EWI-OR0068: La valeur de début de la séquence dépasse la valeur maximale autorisée par Snowflake.
Alter Session¶
Alter session¶
Alter session a un équivalent dans Snowflake et certaines variables sont mappées à des variables Snowflake. Si une permutation d’Alter Session n’est pas prise en charge, le nœud sera commenté et un avertissement sera ajouté.
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';
Référence des paramètres de session¶
Note
Les paramètres de session qui n’apparaissent pas dans la table ne sont pas actuellement transformés.
Paramètre de session |
Transformation Snowflake |
|---|---|
NLS_DATE_FORMAT |
DATE_INPUT_FORMAT et DATE_OUTPUT_FORMAT |
NLS_NUMERIC_CHARACTERS |
NOT SUPPORTED |
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
Pas d’EWIs connexes.
Create Synonym¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Create Synonym¶
Les synonymes ne sont pas pris en charge par Snowflake. Les références aux synonymes seront modifiées pour l’objet d’origine.
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
;
Exemple 1 : Synonyme qui fait référence à une table.¶
Code source 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;
Code migré de Snowflake : vous remarquerez que le site SELECT faisait initialement référence à un synonyme, mais qu’il fait désormais référence à la table qui pointe vers le synonyme.
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;
Exemple 2 : Synonyme qui fait référence à un autre synonyme.¶
Code source 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);
Code migré de Snowflake : vous remarquerez qu’à l’origine SELECT, UPDATE et INSERT font référence à un synonyme, et font désormais référence à l’objet atomique, qui est une table.
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);
[Exemple 3 : Synonyme qui fait référence à une vue¶
Code source 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;
Code migré Snowflake : vous remarquerez que SELECT fait à l’origine référence à un synonyme, et fait désormais référence aux objets atomiques, qui sont une vue.
----** 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 connexes¶
SSC-FDM-0001 : Les vues sélectionnant toutes les colonnes d’une même table ne sont pas exigées dans Snowflake.
SSC-FDM-0006: La colonne de type nombre peut ne pas se comporter de la même manière dans Snowflake.
SSC-FDM-OR0005: Les synonymes ne sont pas pris en charge dans Snowflake, mais les références à ce synonyme ont été modifiées par le nom d’objet d’origine.