SnowConvert AI - Oracle - Instruções SQL¶
Este documento detalha todas as semelhanças, diferenças na sintaxe do SQL e como o SnowConvert AI traduziria essas sintaxes do SQL em uma sintaxe funcional do Snowflake SQL.
Alter Table¶
Esta seção mostra as traduções relacionadas a ALTER TABLE.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
1. Description¶
Use a instrução ALTER TABLE para alterar a definição de uma tabela não particionada, uma tabela particionada, uma partição de tabela ou uma subpartição de tabela. Para tabelas de objetos ou tabelas relacionais com colunas de objetos, use ALTER TABLE para converter a tabela na definição mais recente de seu tipo referenciado depois que o tipo tiver sido alterado (documentação do Oracle).
Sintaxe do 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 }
] ...
;
Nota
Para analisar a sintaxe do Snowflake, consulte a documentação a seguir.
2. Sample Source Patterns¶
2.1. Alter table com cláusulas¶
Aviso
memoptimize_read_clause e memoptimize_read_clause não são aplicáveis no Snowflake, portanto, estão sendo removidas.
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));
Nota
Somente algumas column_clauses e constraint_clauses são aplicáveis no Snowflake. No Oracle, alter table permite modificar as propriedades das partições criadas, mas, no Snowflake, essas ações não são necessárias
2.2. Alter table com casos não suportados¶
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. Ação ADDCONSTRAINT¶
A ação ADD CONSTRAINT tem um equivalente no Snowflake, mas somente uma restrição pode ser adicionada por instrução ALTER TABLE, portanto, ela será comentada quando a instrução contiver duas ou mais restrições.
Aviso
enable_disable_clause foi removido, pois não é relevante no 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;
Problemas conhecidos¶
Algumas propriedades das tabelas podem ser adaptadas ou não aplicáveis.
Create Database Link¶
Aviso
Atualmente, a instrução _ Create Database Link _ não está sendo convertida, mas está sendo analisada. Além disso, se o seu código-fonte tiver instruçõescreate database link, elas serão contabilizadas no _ Relatório de avaliação. _
Exemplo de um código-fonte¶
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
Saída do 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
Referências de links de banco de dados¶
Se no seu código de entrada você usar objetos do link do banco de dados, o código de saída manterá o nome desses objetos, mas o nome do link do banco de dados que eles estão usando será removido.
Exemplo de um código-fonte¶
-- 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;
Saída do 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 relacionados¶
SSC-EWI-OR0123: Conexões Db Link incompatíveis.
SSC-FDM-0007: Elemento com dependências ausentes.
Drop Table¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
A instrução Drop Table é usada para remover uma tabela. Essa instrução varia um pouco entre o Oracle e o Snowflake. Verifique novamente cada documentação para obter mais informações sobre as diferenças.
No Oracle, a sintaxe de Drop Table é a seguinte:
DROP TABLE <table_name> [ CASCADE CONSTRAINTS ] [ PURGE ]
No Snowflake, a sintaxe de Drop Table é a seguinte:
DROP TABLE [ IF EXISTS ] <table_name> [ CASCADE | RESTRICT ]
A principal diferença é que o Snowflake não tem uma cláusula igual para PURGE, pois a tabela não será removida permanentemente do sistema. No entanto, as cláusulas CASCADE CONSTRAINTS e CASCADE são as mesmas. Ambas eliminam a tabela, mesmo que existam chaves estrangeiras que façam referência a essa tabela.
Exemplos¶
Agora, vamos ver alguns exemplos de código e como ele ficaria depois de ser transformado. Cada exemplo usa uma variação diferente da instrução Drop Table.
Exemplo 1:¶
Este exemplo usa a instrução Drop Table da forma mais simples possível.
Código de entrada:
DROP TABLE TEST_TABLE1;
Código transformado:
DROP TABLE TEST_TABLE1;
Exemplo 2:¶
Este exemplo usa a instrução Drop Table com a cláusula PURGE. Lembre-se de que não há equivalente no Snowflake para a cláusula PURGE dentro de uma instrução Drop Table.
Código de entrada:
DROP TABLE TEST_TABLE1 PURGE;
Código transformado:
DROP TABLE TEST_TABLE1;
Exemplo 3:¶
Este exemplo usa a instrução Drop Table com a cláusula CASCADE CONSTRAINTS.
Código de entrada:
DROP TABLE TEST_TABLE1 CASCADE CONSTRAINTS;
Código transformado:
DROP TABLE TEST_TABLE1 CASCADE;
No código transformado, a palavra CONSTRAINTS é removida da cláusula CASCADE CONSTRAINTS.
Exemplo 4:¶
Este exemplo usa a instrução Drop Table com as cláusulas CASCADE CONSTRAINTS e PURGE.
Código de entrada:
DROP TABLE TEST_TABLE1 CASCADE CONSTRAINTS PURGE;
Código transformado:
DROP TABLE TEST_TABLE1 CASCADE;
Como visto, o código muda. No novo código do Snowflake, a cláusula PURGE foi removida e a palavra CONSTRAINTS também foi removida da cláusula CASCADE.
Equivalência funcional¶
Execute o código a seguir para verificar a equivalência funcional; lembre-se de que a única parte que não é equivalente é a cláusula PURGE, que no Oracle remove completamente a tabela do sistema e não há igual para o Snowflake. Em ambos os casos, a tabela é descartada mesmo que seja referenciada em outra tabela.
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 relacionados¶
Sem EWIs relacionados.
Create Index¶
Aviso
Atualmente, a instrução _ Create Index _ não está sendo convertida, mas está sendo analisada. Além disso, se o seu código-fonte tiver instruções Create index, elas serão contabilizadas no _ Relatório de avaliação. _
Exemplo de um código analisado de create index:¶
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;
Nota
Por razões arquitetônicas, o Snowflake não oferece suporte a índices, então a SnowConvert AI removerá todo o código relacionado à criação de índices. O Snowflake automaticamente cria micropartições para cada tabela. Isso ajuda a acelerar o desempenho das operações DML, e o usuário não precisa se preocupar em criar ou gerenciar essas micropartições.
Normalmente, isso é suficiente para obter um desempenho de consulta excepcionalmente bom. No entanto, há maneiras de aprimorá-lo criando chaves de clustering de dados. A página oficial do Snowflake fornece mais informações sobre micropartições e clustering de dados.
Create Sequence¶
Vejamos primeiro um exemplo de código e como ele ficaria depois de ser transformado.
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"}}';
A primeira alteração que é feita é aplicar o esquema ou datawarehouse ao nome da sequência. A segunda transformação consiste em remover alguns elementos e adicioná-los como comentários, já que o oracle tem alguns elementos na sequência de criação que não são compatíveis com o snowflake.
No Oracle, após o nome da sequência, os elementos que não são comentados são os seguintes
START WITH 1000
INCREMENT BY 1
Se o elemento não for um desses, ele será comentado e adicionado como um aviso logo antes da sequência de criação, como no exemplo.
Os elementos a seguir são os que foram removidos
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: A gramática do Snowflake é a mesma do Oracle.
CURRVAL: O Snowflake não tem um equivalente, portanto é transformado em uma função de stub. Consulte este link para entender a abordagem do 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;
Sequência STARTWITH¶
O valor da instrução START WITH pode exceder o valor máximo permitido pelo Snowflake. O que a Snowflake disse sobre o valor inicial é o seguinte: Especifica o primeiro valor retornado pela sequência. Os valores compatíveis são qualquer valor que possa ser representado por um número inteiro de dois complementos de 64 bits (de -2^63 a 2^63-1). Portanto, de acordo com o que foi mencionado anteriormente, o valor máximo permitido é 9223372036854775807 para números positivos e 9223372036854775808 para números negativos.
Exemplo de código¶
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 relacionados¶
SSC-EWI-OR0069: A propriedade sequencial CURRVAL não é compatível com o Snowflake.
SSC-EWI-OR0068: O valor inicial da sequência excede o valor máximo permitido pelo Snowflake.
Alter Session¶
Alter session¶
Alter session tem um equivalente no Snowflake e algumas das variáveis são mapeadas para as variáveis do Snowflake. Se uma permutação de Alter Session não for compatível, o nó será comentado e um aviso será adicionado.
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';
Referência dos parâmetros da sessão¶
Nota
Os parâmetros de sessão que não aparecem na tabela não estão sendo transformados no momento.
Parâmetro de sessão |
Transformação do Snowflake |
|---|---|
NLS_DATE_FORMAT |
DATE_INPUT_FORMAT e DATE_OUTPUT_FORMAT |
NLS_NUMERIC_CHARACTERS |
NOT SUPPORTED |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.
Create Synonym¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Create Synonym¶
Os sinônimos não são compatíveis com o Snowflake. As referências aos sinônimos serão alteradas para o objeto original.
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
;
Exemplo 1: Sinônimo que se refere a uma tabela.¶
Código-fonte 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;
Código migrado do Snowflake: você notará que SELECT se refere originalmente a um sinônimo, mas agora se refere à tabela que aponta o sinônimo.
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;
Exemplo 2: Sinônimo que se refere a outro sinônimo.¶
Código-fonte 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);
Código migrado do Snowflake: você notará que, originalmente, SELECT, UPDATE, INSERT refere-se a um sinônimo, e agora se refere ao objeto atômico, que é uma tabela.
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);
Exemplo 3: Sinônimo que se refere a uma exibição¶
Código-fonte 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;
Código migrado do Snowflake: você notará que SELECT originalmente se refere a um sinônimo e, agora, se refere aos objetos atômicos, que é uma exibição.
----** 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 relacionados¶
SSC-FDM-0001: As visualizações que selecionam todas as colunas de uma única tabela não são necessárias no Snowflake.
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-FDM-OR0005: Sinônimos não são compatíveis com o Snowflake, mas as referências a este sinônimo foram alteradas pelo nome do objeto original.