SnowConvert AI – Problemas com o Oracle¶
SSC-EWI-OR0001¶
O valor inicial da sequência com «LIMIT VALUE» não é compatível com o Snowflake.
Descrição¶
Este erro ocorre quando o valor da instrução START WITH é LIMIT VALUE.
No Oracle, esta cláusula é utilizada apenas em ALTER TABLE
STARTWITHLIMIT VALUE, que é específica paraidentity_options, e só pode ser utilizada comALTERTABLEMODIFY. Se você especificarSTARTWITHLIMIT VALUE, o Oracle Database bloqueará a tabela e encontrará o valor máximo da coluna de identidade na tabela (para sequências crescentes) ou o valor mínimo da coluna de identidade (para sequências decrescentes) e atribuirá o valor como a marca d’água alta do gerador de sequência. O próximo valor retornado pelo gerador de sequência será a marca d’água alta +INCREMENTBYintegerpara sequências crescentes ou a marca d’água alta –INCREMENTBYintegerpara sequências decrescentes.
ALTER TABLE ORACLE¶
Exemplo de código¶
Código de entrada:¶
CREATE SEQUENCE SEQUENCE1
START WITH LIMIT VALUE;
Código gerado:¶
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"}}';
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0002¶
Colunas da expressão não encontradas.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
High
Descrição¶
Este erro ocorre quando as colunas de uma expressão de seleção não podem ser resolvidas, geralmente quando se refere a um acesso de tipo cuja referência não foi resolvida ou a uma coluna com um tipo definido pelo usuário cujas colunas não foram definidas; como um tipo sem corpo ou um tipo de objeto sem colunas.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE record_unknown_table_proc
AS
unknownTable_variable_rowtype unknownTable%ROWTYPE;
BEGIN
INSERT INTO MyTable values unknownTable_variable_rowtype;
END;
Código gerado:¶
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;
$$;
Práticas recomendadas¶
Verifique se a definição de tipo referenciada tem colunas.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0004¶
A sintaxe utilizada em select não é compatível com o Snowflake.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
High
Descrição¶
Este aviso ocorre quando uma cláusula em um select não é compatível com o Snowflake. As cláusulas não compatíveis são:
CONTAINERS
HIERARCHIES
EXTERNAL MODIFY
SHARDS
Exemplo de código¶
Código de entrada:¶
SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Código gerado:¶
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);
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0005¶
Os parâmetros BFILE/BLOB são considerados binários. Um formato pode ser necessário.
Nota
Este EWI está obsoleto. Consulte a documentação SSC-FDM-OR0043.
Gravidade¶
Low
Descrição¶
Este erro ocorre quando uma função TO_CLOB é convertida em uma função TO_VARCHAR. Um formato pode ser necessário para os parâmetros BFILE/BLOB.
Exemplo de código¶
Código de entrada: ¶
SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
Código gerado:¶
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;
Práticas recomendadas¶
Verifique se as saídas no código de entrada e no código convertido são equivalentes e adicione um parâmetro de formato, se necessário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0006¶
Pode ser necessário definir um formato TimeStampOutput.
Nota
Este EWI está obsoleto. Consulte a documentação SSC-FDM-OR0047.
Gravidade¶
Low
Descrição¶
O parâmetro de sessão TIMESTAMP_OUTPUT_FORMAT pode precisar ser definido como «DD-MON-YY HH24.MI.SS.FF AM TZH:TZM» para equivalência de saída de carimbo de data/hora.
Exemplo de código¶
Código de entrada: ¶
SELECT SYSTIMESTAMP FROM DUAL;
Exemplo de saída padrão do TIMESTAMP no Oracle¶
Saída
13-JAN-21 04.18.37.288656 PM +00:00
Código gerado:¶
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;
Exemplo de saída padrão do TIMESTAMP no Snowflake¶
Saída
2021-01-13 08:18:19.720 -080
Práticas recomendadas¶
Para alterar o formato de saída do carimbo de data/hora no Snowflake, use a seguinte consulta:
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'DD-MON-YY HH24.MI.SS.FF AM TZH:TZM';Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0007¶
Create Type não compatível no Snowflake
Descrição¶
Esta mensagem é adicionada quando uma instrução Create Type não compatível com o Snowflake é utilizada.
Exemplo de código¶
Código de entrada (Oracle):¶
CREATE TYPE type6 UNDER type5(COL1 INTEGER);
Código gerado:¶
--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0008¶
Formato desconhecido; pode apresentar comportamento inesperado.
Gravidade¶
Low
Descrição¶
Este erro é adicionado para formatos de data desconhecidos que podem apresentar comportamento inesperado.
Exemplo de código¶
Código de entrada:¶
SELECT TO_CHAR(DATE '1998-12-25','iw-iyyy') FROM DUAL;
Código gerado:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0008 - UNKNOWN FORMAT, MAY HAVE UNEXPECTED BEHAVIOR ***/!!!
TO_CHAR(DATE '1998-12-25','iw-iyyy'') FROM DUAL;
Nota
Observe que «iw-iyyy» não é um formato compatível.
Práticas recomendadas¶
Consulte esta documentação para obter informações sobre os formatos de carimbo de data/hora compatíveis.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0009¶
JSON_TABLE não é suportado.
Gravidade¶
High
Descrição¶
A função JSON_TABLE não é compatível atualmente.
Exemplo de código¶
Código de entrada:¶
SELECT jt.phones
FROM j_purchaseorder,
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR2(100) FORMAT JSON PATH '$.Phone')) AS jt;
Código gerado:¶
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;
Práticas recomendadas¶
Você pode aproveitar a função FLATTEN no Snowflake para emular a funcionalidade de JSON_TABLE.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0010¶
As cláusulas de particionamento são tratadas pelo Snowflake. É necessária uma correção manual.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Crítico
Descrição¶
Este aviso aparece quando as cláusulas PARTITION e SUBPARTITION aparecem em uma consulta. O Snowflake lida com partições automaticamente.
Exemplo de código¶
Código de entrada:¶
SELECT * FROM table1 PARTITION(col1);
Código gerado:¶
SELECT * FROM
table1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0010 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE. IT REQUIRES MANUAL FIX ***/!!!
PARTITION(col1);
Práticas recomendadas¶
Uma alteração manual é necessária para conseguir uma funcionalidade equivalente no Snowflake. Uma condição
WHEREé necessária para filtrar as linhas para a partição específica. No entanto, com essa solução alternativa, o desempenho é afetado.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0011¶
O parâmetro de formato não é compatível.
Gravidade¶
Medium
Descrição¶
O parâmetro de formato não é compatível atualmente pelo Snowflake para funções de conversão em casos especiais. Por exemplo, quando usamos «MONTH» ou «DAY» dentro do formato DATE ou TIMESTAMP.
"MONTH/DD/YYYY" or "MM/DAY/YY" ...
Outro cenário é quando você está trabalhando com a função CAST usando NUMBER. Atualmente, o SnowFlake precisa de quatro argumentos para exibir a parte decimal. Por enquanto, o código de saída não oferece todos os argumentos necessários para o SnowFlake. Você precisa adicionar os argumentos restantes para a função TO_NUMBER.
Exemplo de código¶
Código de entrada:¶
SELECT CAST('12.48' AS NUMBER, '99.99') FROM DUAL;
Código gerado:¶
SELECT
TO_NUMBER('12.48', '99.99', 38, 2)
FROM DUAL;
Código de entrada:¶
SELECT CAST('FEBRUARY/18/24' as DATE, 'MONTH/DD/YY') FROM DUAL;
SELECT CAST('FEB/MON/24' as DATE, 'MON/DAY/YY') FROM DUAL;
Código gerado:¶
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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0013¶
O parâmetro NLS não é compatível.
Gravidade¶
Medium
Descrição¶
O parâmetro NLS não é compatível atualmente para as seguintes funções:
TOCHAR
TODATE
TONUMBER
TOTIMESTAMP
CAST
Exemplo de código¶
Código de entrada:¶
SELECT TO_NUMBER('-AusDollars100','9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''') "Amount" FROM DUAL;
Código gerado:¶
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 não é compatível.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
A função NLSSORT não é compatível atualmente no corpo de uma instrução SELECT.
Exemplo de código¶
Código de entrada:¶
SELECT NLSSORT(name, 'NLS_SORT = ENGLISH') FROM products;
Código gerado:¶
// 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;
Práticas recomendadas¶
NLSSORT é convertida em uma função definida pelo usuário (UDF/Stub), para que você possa modificá-la e emular a funcionalidade.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0016¶
XML não é suportado.
Gravidade¶
Medium
Descrição¶
As seguintes funções relacionadas a XML não são compatíveis:
EXTRACT
EXTRACTVALUE
XMLSEQUENCE
XMLTYPE
Exemplo de código¶
Código de entrada:¶
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>')));
Código gerado:¶
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>')));
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0020¶
Valores negativos não são compatíveis para a função.
Gravidade¶
Medium
Descrição¶
O Snowflake não é compatível com valores negativos para a função, o que causará um comportamento diferente quando executado.
Exemplo de código¶
Código de entrada:¶
SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;
Código gerado:¶
SELECT
REGEXP_INSTR('CORPORATE FLOOR','OR', -3, 2) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0020 - NEGATIVE VALUES NOT SUPPORTED FOR FUNCTION ***/!!! FROM DUAL;
Práticas recomendadas¶
Crie uma função definida pelo usuário que possa lidar com o parâmetro negativo ou procure outra alternativa.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0023¶
A função AGGREGATE não é compatível.
Gravidade¶
High
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este erro é adicionado quando uma função agregada como
DENSE_RANK()
RANK()
PERCENT_RANK()
CUME_DIST()
não é compatível com o Snowflake.
Exemplo de código¶
Código de entrada:¶
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;
Código gerado:¶
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;
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0026¶
ROWID não é suportado.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
A instrução ROWID não é compatível atualmente.
Exemplo de código¶
Oracle:¶
SELECT QUERY_NAME.ROWID from TABLE1;
Snowflake Scripting:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0026 - ROWID NOT SUPPORTED ***/!!!
QUERY_NAME.ROWID from
TABLE1;
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0029¶
DEFAULT ON CONVERSION ERROR não é compatível.
Descrição¶
Default on conversion error não compatível no Snowflake.
Exemplo de código¶
Código de entrada:¶
SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
Código gerado:¶
SELECT
PUBLIC.TO_NUMBER_UDF('2,00', 0) "Value" FROM DUAL;
Práticas recomendadas¶
Você pode criar UDF para emular o comportamento do valor
DEFAULTON CONVERSION ERROR.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0030¶
A instrução KEEP utilizada na função agregada não é compatível.
Gravidade¶
Medium
Descrição¶
Este erro parece alertar que a instrução KEEP utilizada para indicar que apenas o primeiro ou o último valor da função agregada será retornado não é compatível.
Exemplo de código¶
Código de entrada:¶
SELECT
department_id,
MIN(salary) KEEP (
DENSE_RANK FIRST
ORDER BY
commission_pct
) "Worst"
FROM
employees;
Código gerado:¶
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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0031¶
O parâmetro SYS_CONTEXT não é compatível.
Gravidade¶
Low
Descrição¶
Este erro ocorre quando um parâmetro de função SYS_CONTEXT não é compatível. O Snowflake é compatível com funções de contexto semelhantes. Consulte a página para obter mais informações.
Exemplo de código¶
Código de entrada:¶
SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Código gerado:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0031 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE ***/!!!
SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Práticas recomendadas¶
A função é convertida em uma função definida pelo usuário (stub), para que você possa modificá-la e emular o comportamento do parâmetro SYS_CONTEXT.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0032¶
O parâmetro com o formato especificado não é compatível.
Gravidade¶
Medium
Descrição¶
Este erro ocorre quando um parâmetro em uma função não é compatível.
Exemplo de código¶
Código de entrada:¶
SELECT TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
Código gerado:¶
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;
Práticas recomendadas¶
A função é convertida em uma função definida pelo usuário (stub), para que você possa modificá-la e emular o comportamento do parâmetro.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0033¶
A declaração PL/SQL em WITH não é compatível.
Gravidade¶
Medium
Descrição¶
Declarações PL/SQL em instruções WITH não são compatíveis.
Exemplo de código¶
Código de entrada:¶
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;
Código gerado:¶
// 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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0035¶
A função de tabela não é compatível quando utilizada como uma coleção de expressões.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
A função TABLE não é compatível com o Snowflake quando utilizada como uma coleção de expressões.
Exemplo de código¶
Código de entrada:¶
SELECT
TABLE2.COLUMN_VALUES
FROM TABLE1 i, TABLE(i.groups) TABLE2;
Código gerado:¶
// 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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0036¶
Problemas de resolução de tipos; a operação aritmética pode não se comportar corretamente entre a cadeia de caracteres e a data
Gravidade¶
Low
Descrição¶
Esse problema ocorre quando uma operação aritmética pode não se comportar corretamente entre dois tipos de dados específicos.
Exemplo de código¶
Código de entrada:¶
SELECT
SYSDATE,
SYSDATE + '1',
SYSDATE + 'A'
from
dual;
Código gerado:¶
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;
Nota
Observe que a operação entre uma cadeia de caracteres e uma data pode não se comportar corretamente.
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0038¶
Cláusula de pesquisa removida da instrução com o elemento.
Gravidade¶
Low
Descrição¶
A search_clause é utilizada para definir a ordem em que as linhas são processadas em uma instrução SELECT. Essa funcionalidade permite uma travessia personalizada dos dados, garantindo que os resultados sejam retornados em uma sequência específica com base nos critérios especificados. É importante observar, no entanto, que esse comportamento, caracterizado pela search_clause, não é compatível com o Snowflake.
Em bancos de dados como o Oracle, a search_clause é comumente utilizada em conjunto com consultas recursivas ou expressões de tabela comuns (CTEs) para influenciar a sequência em que os dados hierárquicos são explorados. Ao designar uma coluna específica ou um conjunto de colunas na search_clause, você pode controlar a travessia da hierarquia por profundidade primeiro ou por largura primeiro, afetando a ordem em que as linhas são processadas.
No Snowflake, a mensagem search_clause será gerada e a search_clause será eliminada posteriormente.
Exemplo de código¶
Código de entrada:¶
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;
Código gerado:¶
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;
Recomendação¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0039¶
A cláusula nocycle não é compatível com o Snowflake.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Low
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI encontra uma consulta com uma cláusula NOCYCLE, que não é compatível com o Snowflake.
Esta cláusula marca quando há uma recursão.
Para obter mais detalhes, consulte a documentação sobre a funcionalidade da cláusula.
Exemplo de código¶
Conectar por¶
Código de entrada:¶
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;
Código gerado:¶
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;
Práticas recomendadas¶
Se houver ciclos na hierarquia de dados, consulte este artigo para lidar com eles.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com.
Consulte o seguinte link para obter uma solução alternativa manual: https://community.snowflake.com/s/article/NOCYCLE-workaround
SSC-EWI-OR0042¶
A cláusula MODEL não é compatível.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Low
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI encontra uma consulta com uma cláusula MODEL, que não é compatível com o Snowflake.
Exemplo de código¶
Código de entrada:¶
SELECT
employee_id,
salary
FROM
employees
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
Código gerado:¶
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)
();
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0045¶
O tipo de conversão L e FML não são compatíveis.
Gravidade¶
Medium
Descrição¶
Este problema ocorre quando se tenta converter usando FML ou o formato L não é aplicável no Snowflake; nesse caso, o código é comentado e esta mensagem é adicionada.
Exemplo de código:¶
Código de entrada:¶
SELECT CAST(' $123.45' as number, 'L999.99') FROM DUAL;
SELECT CAST('$123.45' as number, 'FML999.99') FROM DUAL;
Código gerado:¶
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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0046¶
A sintaxe ALTER TABLE não é aplicável no Snowflake.
Nota
Este EWI está obsoleto. Consulte a documentação SSC-EWI-0109.
Gravidade¶
Medium
Descrição¶
A sintaxe ALTER TABLE utilizada não é aplicável no Snowflake; nesse caso, o código é comentado e esta mensagem é adicionada.
Exemplo de código:¶
Código de entrada:¶
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;
Código gerado:¶
!!!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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0047¶
TO_NCHAR transformado em TO_VARCHAR, pode não ser compilável no Snowflake.
Gravidade¶
Low
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este aviso é adicionado quando a função TO_NCHAR é encontrada e transformada em uma função TO_VARCHAR.
Há vários casos em que a transformação causa um erro de compilação ou a saída não é a mesma.
Exemplo de código¶
Código de entrada:¶
select TO_NCHAR(sysdate,'DY','nls_date_language=english') from dual
Código gerado:¶
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;
O exemplo acima resultará em um erro se for utilizado no Snowflake.
Nem todos os casos causam erros.
Código de entrada:¶
SELECT TO_NCHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;
Código gerado:¶
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;
O último exemplo não causa um erro no Snowflake, e a saída será equivalente se for executado.
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0049¶
Constantes de pacote no pacote com estado ainda não são compatíveis.
Gravidade¶
Crítico
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este aviso é adicionado quando há um membro de um pacote com estado que ainda não é compatível.
Este recurso está planejado para ser lançado no futuro.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PACKAGE MY_PACKAGE
AS
TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
END;
Código gerado:¶
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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0050¶
A expressão de entrada está fora do intervalo.
Gravidade¶
Medium
Descrição¶
Este problema ocorre ao tentar converter um valor de entrada que está fora do intervalo. Isso significa que os valores de precisão não são aplicáveis no Snowflake; nesse caso, o código é comentado e esta mensagem é adicionada.
Exemplo de código:¶
Código de entrada:¶
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;
Código gerado:¶
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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0051¶
PRAGMA EXCEPTION_INIT não é compatível.
Gravidade¶
Low
Descrição¶
Este EWI é adicionado quando a função PRAGMA EXCEPTION_INIT é invocada dentro de um procedimento. O nome da exceção e o código SQL das exceções são definidos na função RAISE. Quando é convertido para o -Snowflake Scripting, o código SQL é adicionado à declaração da exceção; no entanto, alguns valores de código podem ser inválidos no Snowflake Scripting.
Código de exemplo ¶
Código de entrada:¶
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;
/
Código gerado:¶
Script 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;
$$;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0052¶
A declaração de exceção é tratada pela função raise.
Gravidade¶
Low
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Nota
Gere procedimentos e macros usando JavasScript como linguagem de destino, adicionando o seguinte sinalizador -t JavaScript ou --PLTargetLanguage JavaScript
Descrição¶
Exceções podem ser definidas em ambas as linguagens, Oracle e Snowflake, mas a função RAISE foi projetada para fazer a declaração, a atribuição e lançar o erro. É por isso que a declaração da exceção foi transformada em comentário e o aviso é exibido.
Exemplo de código¶
Código de entrada:¶
-- 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;
Código gerado:¶
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
;
$$;
Nota
Algumas partes dos códigos de saída foram omitidas para torná-los mais legíveis.
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0053¶
Formato de entrada incorreto
Gravidade¶
Medium
Descrição¶
Esse problema ocorre ao tentar converter usando um formato de entrada incorreto; nesse caso, o código é comentado e esta mensagem é adicionada.
Exemplo de código:¶
Código de entrada:¶
SELECT CAST('12sdsd3,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12345sdsd' AS NUMBER, '99999') FROM DUAL;
Código gerado:¶
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;
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0057¶
A transformação para procedimentos ou funções aninhadas não é compatível neste cenário.
Gravidade¶
Crítico
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
A tradução de funções aninhadas dentro de outras funções ou procedimentos não é compatível. Da mesma forma, procedimentos aninhados dentro de funções ou blocos anônimos não são compatíveis atualmente.
No entanto, procedimentos aninhados dentro de outros procedimentos ou pacotes são compatíveis. Para obter mais detalhes, consulte a documentação de procedimentos aninhados.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE function FOO1 RETURN INTEGER AS
FUNCTION FOO2 RETURN INTEGER AS
BEGIN
RETURN 123;
END;
BEGIN
RETURN FOO2() + 456;
END;
Código gerado:¶
!!!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;
$$;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0067¶
A definição de várias restrições em uma única instrução não é compatível com o Snowflake.
Gravidade¶
Medium
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
A definição de várias restrições em uma única instrução ALTER TABLE não é compatível com o Snowflake.
Exemplo de código¶
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);
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0068¶
O valor inicial da sequência excede o valor máximo permitido pelo Snowflake.
Gravidade¶
Medium
Descrição¶
Este erro ocorre quando o valor da instrução START WITH excede o valor máximo permitido pelo Snowflake. O que o Snowflake diz sobre o valor inicial é: Especifica o primeiro valor retornado pela sequência. Valores compatíveis são qualquer valor que possa ser representado por um inteiro de 64 bits em complemento de dois (de -2^63 a 2^63-1). Portanto, de acordo com o mencionado anteriormente, o valor máximo permitido é 9223372036854775807 para números positivos e 9223372036854775808 para números negativos.
Exemplo de código¶
Código de entrada:¶
CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Código gerado:¶
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"}}';
Práticas recomendadas¶
Recomenda-se simplesmente redefinir a sequência e modificar também o uso dela. NOTE: a coluna de destino deve ter espaço suficiente para armazenar esse valor.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0069¶
A propriedade CURRVAL de sequência não é compatível com o Snowflake.
Gravidade¶
Medium
Descrição¶
A propriedade CURRVAL de sequência não é compatível com o Snowflake.
Exemplo de código¶
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;
Práticas recomendadas¶
Você pode consultar este link para ver o que o Snowflake sugere para lidar com situações em que a propriedade CURRVAL é utilizada.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0070¶
Operação binária não compatível
Gravidade¶
Medium
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Uma operação binária não é compatível atualmente; uma função definida pelo usuário foi adicionada.
Exemplo de código¶
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;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0071¶
Quantificador configurado incompatível
Gravidade¶
Low
Descrição¶
O quantificador «all» não é compatível com o Snowflake. O modificador é removido do código-fonte e um aviso é adicionado; o código resultante pode se comportar de maneira inesperada.
Exemplo de código¶
Código de entrada:¶
SELECT location_id FROM locations
MINUS ALL
SELECT location_id FROM departments;
Código gerado:¶
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;
No Snowflake, os operadores INTERSECT e MINUS/EXCEPT sempre removerão valores duplicados.
Práticas recomendadas¶
Verifique alternativas no Snowflake para emular a funcionalidade do quantificador «all». Veja abaixo uma solução alternativa para
MINUS ALLeEXCEPT ALL.
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
);
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0072¶
Membro procedural não compatível.
Gravidade¶
Medium
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Nota
Gere procedimentos e macros usando JavasScript como linguagem de destino, adicionando o seguinte sinalizador -t JavaScript ou –PLTargetLanguage JavaScript.
Descrição¶
Um membro procedural não é compatível atualmente. Exemplos de membros procedurais:
Declarações de constantes.
Declarações de cursores.
Declarações de pragmas.
Declarações de variáveis.
Exemplo de código¶
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;
$$;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0075¶
Rótulos em instruções não são compatíveis
Gravidade¶
Medium
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Nota
Gere procedimentos e macros usando JavasScript como linguagem de destino, adicionando o seguinte sinalizador -t JavaScript ou –PLTargetLanguage JavaScript.
Descrição¶
Rótulos em instruções não são compatíveis para referenciar um bloco de código.
Exemplo de código¶
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
;
$$;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0076¶
Pacote integrado não compatível.
Gravidade¶
Medium
Descrição¶
A tradução para pacotes integrados não é compatível atualmente.
Exemplo de código¶
Código de entrada (Oracle):¶
SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
Código gerado:¶
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;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0078¶
Não foi possível analisar a instrução dinâmica SQL dentro de Execute Immediate.
Gravidade¶
Medium
Descrição¶
O SnowConvert AI não conseguiu analisar a instrução dinâmica SQL dentro do Execute Immediate.
Nota
Gere procedimentos e macros usando JavasScript como linguagem de destino, adicionando o seguinte sinalizador -t JavaScript ou --PLTargetLanguage JavaScript
Exemplo de código¶
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`)*/
;
$$;
Práticas recomendadas¶
Verifique se há algum erro de sintaxe na instrução dinâmica SQL.
Consulte a documentação do SnowConvert AI para verificar se a instrução ainda é incompatível.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0082¶
Não é possível converter uma expressão de atributo de tipo aninhada
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
Esta mensagem de erro aparece quando uma consulta, como um select, tenta acessar um atributo em uma coluna que foi definida como um tipo. Esses atributos não podem ser convertidos automaticamente, mas podem ser convertidos rapidamente de maneira manual.
Exemplo de código:¶
Código de entrada 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;
Código gerado:¶
!!!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;
Práticas recomendadas¶
Para corrigir o código manualmente, basta alterar o acessador «.» para «:» sempre que uma coluna de tipo estiver sendo acessada.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0087¶
Falha na ordenação das junções externas.
Gravidade¶
Low
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este problema ocorre quando um erro acontece ao reordenar as novas cláusulas ANSI JOIN em uma consulta que anteriormente continha junções externas com o operador (+). Uma consulta com um ciclo de tabelas unidas entre si na cláusula WHERE pode provocar esse problema.
Quando este EWI está presente, as cláusulas JOIN podem não funcionar corretamente devido à ordem delas.
Exemplo de código¶
Código de entrada 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;
Código gerado:¶
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;
Certifique-se de que a consulta seja válida e não contenha tabelas que estejam sendo unidas entre si.
Se o problema persistir, tente qualificar o nome de cada coluna na cláusula WHERE com o nome da tabela.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0089¶
O parâmetro de correspondência REGEXP_LIKE_UDF pode não se comportar corretamente.
Nota
Este EWI está obsoleto. Consulte a documentação SSC-FDM-OR0044.
Gravidade¶
Low
Descrição¶
Este aviso aparece quando a condição REGEXP_LIKE do Oracle vem com o terceiro parâmetro (parâmetro de correspondência). O motivo para adicionar o aviso é que o REGEXP_LIKE_UDF utilizado para substituir o REGEXP_LIKE não reconhece todos os caracteres utilizados pelo parâmetro de correspondência; portanto, o resultado da consulta no Snowflake pode não ser equivalente ao do Oracle.
Exemplo de código¶
Código de entrada Oracle:¶
SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')
ORDER BY last_name;
Código gerado:¶
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;
Quando a condição
REGEXP_LIKEvem com um dos caracteres que não são compatíveis com a função definida pelo usuário, uma possível solução é alterar a expressão regular para simular o comportamento do caractere ausente no parâmetro de correspondência. Para saber mais sobre os caracteres não compatíveis, consulte a documentação do REGEXP_LIKE_UDF.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0090¶
Junção externa não ANSI com predicado Between inválido
Gravidade¶
Medium
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este problema ocorre quando há um OUTER JOIN com o operador (+) dentro de uma cláusula BETWEEN que não pode ser executada no Snowflake. Isso geralmente acontece quando várias tabelas são utilizadas no intervalo da cláusula BETWEEN.
Exemplo de código¶
Código de entrada Oracle:¶
SELECT
*
FROM
hr.countries c, hr.regions r, hr.locations l WHERE
l.location_id BETWEEN r.region_id(+) AND c.region_id(+);
Código gerado:¶
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(+);
Práticas recomendadas¶
Altere manualmente a junção externa para a sintaxe ANSI.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0092¶
A escala negativa do tipo de dados NUMBER foi removida da saída.
Gravidade¶
Low
Descrição¶
Este problema ocorre quando um NUMBER com uma escala negativa está sendo utilizado para aplicar arredondamento ao NUMBER. O Snowflake não é compatível com esse recurso, e esta mensagem é utilizada para indicar que a escala foi removida.
Exemplo de código¶
Código de entrada Oracle:¶
Consultas¶
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;
Resultado¶
COL1|COL2|COL3|
----+----+----+
555| 560| 600|
Código gerado:¶
Consultas¶
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;
Resultado¶
|COL1|COL2|COL3|
|----|----|----|
|555 |555 |555 |
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0095¶
Operação entre o tipo de intervalo e o tipo de data não suportada
Gravidade¶
Low
Descrição¶
INTERVAL YEAR TO MONTH e INTERVAL DAY TO SECOND não são tipos de dados compatíveis; eles são transformados em VARCHAR(20). Portanto, todas as operações aritméticas entre tipos de data e as colunas de tipo de intervalo originais são incompatíveis.
Além disso, operações entre um tipo de intervalo e um tipo de data (nesta ordem) não são compatíveis com o Snowflake, e essas operações também usam este EWI.
Exemplo de código¶
Código de entrada:¶
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;
Código gerado:¶
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;
Práticas recomendadas¶
Implemente a UDF para simular o comportamento do Oracle.
Extraia o valor já transformado que foi armazenado na coluna durante a migração e use-o como uma Constante de intervalo do Snowflake, quando possível.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
¶
SSC-EWI-OR0097¶
As propriedades de procedimento não são compatíveis com procedimentos do Snowflake.
Gravidade¶
Low
Descrição¶
Oracle CREATE PROCEDURE propriedades adicionais não são necessárias e não têm equivalente pelo Snowflake CREATE PROCEDURE.
Exemplo de código¶
Código de entrada Oracle:¶
CREATE OR REPLACE PROCEDURE PROC01
DEFAULT COLLATION USING_NLS_COMP
AUTHID CURRENT_USER
ACCESSIBLE BY (PROCEDURE PROC03)
AS
BEGIN
NULL;
END;
Código gerado:¶
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;
$$;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0099¶
O código de exceção ultrapassa o limite do Snowflake Scripting.
Gravidade¶
Low
Descrição¶
Este EWI aparece quando um código de erro de declaração de exceção excede os limites de número de exceção do Script Snowflake. O número deve ser um inteiro entre -20000 e -20999.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE procedure_exception
IS
my_exception EXCEPTION;
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
NULL;
END;
Código gerado:¶
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;
$$;
Práticas recomendadas¶
Verifique se o código de exceção está dentro dos limites permitidos pelo Snowflake Scripting. Caso contrário, altere-o para outro número de exceção disponível.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0100¶
For Loop com múltiplas condições não é compatível atualmente pelo Snowflake Scripting. Somente a primeira condição é utilizada.
Gravidade¶
Low
Descrição¶
O Oracle permite várias condições em um único FOR LOOP; no entanto, o Snowflake Scripting permite apenas uma condição por FOR LOOP. Apenas a primeira condição é migrada, e as outras são ignoradas durante a transformação.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE P3
AS
BEGIN
FOR i IN REVERSE 1..3,
REVERSE i+5..i+7
LOOP
NULL;
END LOOP;
END;
Código gerado:¶
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;
$$;
Práticas recomendadas¶
Separe
FOR LOOPem loops diferentes ou reescreva a condição.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0101¶
A cláusula específica For Loop não é compatível atualmente pelo Snowflake Scripting.
Gravidade¶
Low
Descrição¶
O Oracle permite cláusulas adicionais à condição FOR LOOP. Como as cláusulas BY, WHILE e WHEN. As cláusulas WHILE e WHEN permitem uma expressão booleana extra como condição. Já a cláusula BY permite um incremento gradual na iteração. Essas cláusulas adicionais não são compatíveis com o Script Snowflake e são ignoradas durante a transformação.
Exemplo de código¶
Código de entrada 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;
Código gerado:¶
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;
$$;
Práticas recomendadas¶
Separe
FOR LOOPem loops diferentes ou reescreva a condição.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0103¶
O formato For Loop não é compatível atualmente com o Snowflake Scripting.
Gravidade¶
High
Descrição¶
O Oracle permite diferentes tipos de condições para um FOR LOOP. Ele é compatível com expressões booleanas, coleções, registros… No entanto, o Snowflake Scripting é compatível com FOR LOOP apenas com inteiros definidos como limites. Todos os outros formatos são marcados como não compatíveis e exigem esforço manual adicional para serem transformados.
Cláusulas de controle de iteração do Oracle que não são compatíveis com FOR LOOP do Snowflake:
single_expression_controlvalues_of_controlindices_of_controlpairs_of_control
Perigo
cursor_iteration_control está atualmente marcado como não compatível. Remover os parênteses da expressão deve transformá-la em CURSOR FOR LOOP.
Original:
FOR i IN (cursor_variable) LOOP NULL; END LOOP;
Deve ser alterado para:
FOR i IN cursor_variable LOOP NULL; END LOOP;
Exemplo de código¶
Código de entrada 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;
Código gerado:¶
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;
$$;
Práticas recomendadas¶
Reescreva a condição
FOR LOOPou use um tipo diferente deLOOPpara simular o comportamento.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0104¶
Variável de coleção inutilizável
Gravidade¶
High
Descrição¶
As coleções do Oracle não são atualmente compatíveis com o SnowConvert AI. Todas as variáveis de tipos de coleção e seus usos serão transformados em comentário.
Nota
Gere procedimentos e macros usando JavasScript como linguagem de destino, adicionando o seguinte sinalizador -t JavaScript ou --PLTargetLanguage JavaScript
Exemplo de código¶
Código de entrada 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;
Código de saída¶
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;
$$;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0105¶
É necessário trabalho adicional para o uso da coluna BFILE. A função BUILD_STAGE_URL é uma solução alternativa recomendada.
Gravidade¶
Low
Descrição¶
A transformação para o tipo de dados BFILE é VARCHAR. No entanto, a tradução para as funções internas do Oracle utilizadas para interagir com os tipos BFILE não é compatível atualmente. A coluna foi migrada para um VARCHAR para armazenar o caminho e o nome do arquivo (consulte a documentação do BFILENAME_UDF para obter mais informações).
Nota
A função BUILD_STAGE_FILE_URL é uma solução alternativa recomendada para trabalhar com arquivos no Snowflake. Ela retornará um link para o arquivo especificado armazenado em uma área de preparação. Consulte a documentação da função aqui.
Exemplo de código¶
Código de entrada Oracle:¶
CREATE TABLE bfiletable ( bfile_column BFILE );
INSERT INTO bfiletable VALUES ( BFILENAME('mydirectory', 'myfile.png') );
Código gerado:¶
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') );
Práticas recomendadas¶
Use a função
BUILD_STAGE_FILE_URLe as outras funções de arquivo para manipular arquivos.
Consulta do 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') );
Resultado¶
URL |
------------------------------------------------------------------------------------------------------+
https://thecompany.snowflakecomputing.com/api/files/CODETEST/PUBLIC/MY_STAGE/%2Fmydirectory%2Fmyfile.jpg|
Nota
Esta função funciona com diferentes opções de armazenamento em nuvem, mas, para obter informações sobre como usar arquivos locais com áreas de preparação, consulte esta documentação.
Altere o tipo de dados para um tipo compatível.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0108¶
A seguinte instrução de atribuição não é compatível com o Snowflake Scripting.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
Alguns tipos de variáveis do Oracle não têm uma tradução direta no Snowflake. Atualmente, a transformação para variáveis de cursor, coleção, registro e tipo definido pelo usuário; bem como espaços reservados, objetos e parâmetros de saída, não são compatíveis com o Snowflake Scripting.
Alterar essas variáveis para tipos de dados semiestruturados do Snowflake pode ajudar como uma solução alternativa em alguns cenários.
Exemplo de código¶
Código de entrada:¶
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;
Código gerado:¶
--** 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;
$$;
Práticas recomendadas¶
Altere o tipo de dados da variável ou tente simular o comportamento usando os tipos de dados semiestruturados do Snowflake.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0109¶
Expressões como argumentos da cláusula Using não são compatíveis com o Snowflake Scripting.
Gravidade¶
Medium
Descrição¶
O Oracle é compatível com o uso de expressões como argumentos para qualquer cláusula USING para as instruções EXECUTE IMMEDIATE. Essa funcionalidade não é compatível com o Snowflake Scripting.
O Snowflake Scripting é compatível com expressões variáveis, e é possível substituir a expressão atribuindo-a manualmente a uma variável (veja o exemplo abaixo).
Exemplo de código¶
Código de entrada:¶
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;
Código gerado:¶
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;
$$;
Procedimento Execute Immediate migrado manualmente:¶
Substituir este procedimento pelo acima resolverá o erro de compilação e produzirá os mesmos resultados que o Oracle.
CREATE OR REPLACE PROCEDURE PUBLIC.expression_arguments ()
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
DECLARE
immediate_input INTEGER := 0;
using_argument_variable INTEGER;
BEGIN
using_argument_variable := immediate_input+1;
EXECUTE IMMEDIATE 'INSERT INTO PUBLIC.immediate_table VALUES (?)' USING (using_argument_variable );
END;
$$;
Práticas recomendadas¶
Os procedimentos podem ser migrados manualmente adicionando uma variável e, em seguida, atribuindo a expressão a ela.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0110¶
A cláusula For Update não é compatível com o Snowflake.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Severidade ¶
High
Descrição ¶
Não existe equivalente para a cláusula FOR UPDATE no Snow Scripting; portanto, um EWI é adicionado e a cláusula é transformada em comentário.
Código de exemplo ¶
Código de entrada:¶
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;
Código gerado:¶
--** 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;
$$;
Práticas recomendadas¶
Lide com a atualização da coluna na consulta
UPDATE/DELETE. Para obter mais detalhes, consulte SSC-EWI-OR0136.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0116¶
Operações entre intervalos não são compatíveis.
Gravidade¶
Medium
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este erro é adicionado quando há uma operação aritmética cujos operandos são apenas intervalos; esse tipo de operação não é compatível com o Snowflake.
Exemplo de código¶
Código de entrada:¶
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;
Código gerado:¶
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;
Práticas recomendadas¶
Dependendo de onde a operação está localizada, ela pode ser realocada e validada com a adição de datas ou carimbos de data/hora.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0118¶
As exibições/tabelas integradas não são compatíveis com o Snowflake.
Gravidade¶
Medium
Descrição¶
O Oracle tem um conjunto de exibições e tabelas integradas que não estão presentes no Snowflake. O SnowConvert AI adiciona uma mensagem de erro às consultas e instruções que usam esses elementos.
Exemplo de código¶
Código de entrada:¶
SELECT * FROM ALL_COL_COMMENTS;
SELECT * FROM (SELECT * FROM ALL_COL_COMMENTS);
Código gerado:¶
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);
Práticas recomendadas¶
Algumas informações fornecidas pelas exibições internas do Oracle podem ser encontradas no Information Schema do Snowflake ou usando o comando SHOW.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0121¶
O uso do pacote interno DBMS_LOB.SUBSTR com uma coluna BFILE não é compatível com o Snowflake.
Gravidade¶
Medium
Descrição¶
As colunas BFILE do Oracle são migradas para VARCHAR no Snowflake. O nome do arquivo é armazenado como uma cadeia de caracteres na nova coluna. Portanto, no Snowflake, usar uma função SUBSTR na coluna migrada retornará uma subcadeia de caracteres do nome do arquivo. Já o DBMS_LOB.SUBSTR do Oracle retornará uma subcadeia de caracteres do conteúdo do arquivo. Para obter mais informações, consulte o tipo de dados BFILE.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE table1
(
bfile_column BFILE
)
SELECT
DBMS_LOB.SUBSTR(bfile_column, 15, 1)
FROM table1;
Código gerado:¶
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;
Práticas recomendadas¶
Consulte a documentação sobre como lidar com arquivos no Snowflake aqui.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0123¶
Conexões de link de banco de dados não são compatíveis
Gravidade¶
Medium
Descrição¶
Uma referência de conexão de link de banco de dados foi removida do nome do objeto porque os links de banco de dados e as referências deles não são compatíveis com o Snowflake. A única parte que é mantida é o nome antes do caractere @.
Exemplo de código¶
Código de entrada:¶
-- 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;
Código gerado:¶
---- 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;
Práticas recomendadas¶
É importante verificar se todos os links de DB têm nomes diferentes. Se dois links de DB tiverem o mesmo nome e o código for migrado várias vezes, o EWI poderá alterar as informações com base no link de DB que for processado primeiro.
Mova os objetos do banco de dados da referência de link do banco de dados para a mesma instância de banco de dados que está sendo utilizada no Snowflake.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0126¶
Objeto inutilizável porque o tipo personalizado integrado dele não é compatível.
Gravidade¶
Medium
Descrição¶
Este erro parece indicar se um objeto com um tipo personalizado integrado está sendo utilizado.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE proc01 is
var1 DBMS_SQL.VARCHAR2_TABLE;
var2 CTX_CLS.DOC_TAB;
BEGIN
varX := var1.property;
varY := var2(1);
END;
Código gerado:¶
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;
$$;
Práticas recomendadas¶
Nenhuma ação do usuário final é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0128¶
O atributo de cursor booleano não é compatível.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Low
Descrição¶
Esta mensagem é utilizada para indicar que um atributo de cursor booleano não é compatível com o SnowScript ou que não há nenhuma transformação que emule essa funcionalidade no SnowScript. A tabela a seguir mostra os atributos de cursor booleano que podem ser emulados:
Atributo Boolean Cursor |
Status |
|---|---|
|
Pode ser emulado |
|
Pode ser emulado |
|
Não suportado |
Exemplo de código¶
Código de entrada:¶
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;
Código gerado:¶
--** 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;
$$;
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0129¶
Não foi possível resolver o atributo TYPE.
Gravidade¶
Low
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este aviso aparece quando o item referenciado pelo atributo TYPE não pôde ser resolvido e o tipo de dados do item de referência não pôde ser obtido. Portanto, o tipo de dados VARIANT será atribuído em seu lugar.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE procedure01
IS
var1 table01.col1%TYPE;
BEGIN
NULL;
END;
Código gerado:¶
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;
$$;
Práticas recomendadas¶
Verifique o tipo de dados do item referenciado e substitua-o manualmente no atributo TYPE do item de referência.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0133¶
A variável de cursor já foi atribuída.
Gravidade¶
Medium
Descrição¶
Quando uma instrução OPEN FOR é convertida, uma atribuição de cursor com o mesmo nome da variável de cursor utilizada no código de entrada é adicionada juntamente com outras instruções para emular a funcionalidade dela. Como é possível usar várias instruções OPEN FOR com a mesma variável de cursor, haverá várias atribuições de cursor com o mesmo nome no código de saída. Deixar o código de saída como está causará erros de compilação quando executado no Snowflake.
Exemplo de código¶
Código de entrada¶
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;
Código gerado¶
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;
$$;
EWI relacionado¶
SSC-EWI-0030: A instrução abaixo utiliza SQL dinâmico.
Práticas recomendadas¶
Para resolver os erros de compilação do código de saída, as atribuições de cursor que contêm a mensagem SSC-EWI-OR0133 devem ser renomeadas.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0135¶
O período de retenção de dados pode não produzir resultados.
Gravidade¶
Low
Descrição¶
Se uma consulta for executada no Snowflake com o uso de Time Travel, ela poderá não retornar resultados se o tempo especificado não estiver mais dentro do período de retenção de dados. Recomendamos a leitura de mais informações sobre Time Travel do Snowflake.
Exemplo de código¶
Código de entrada¶
SELECT * FROM employees
AS OF TIMESTAMP
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE last_name = 'SampleName';
Código gerado¶
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';
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0136¶
A cláusula Current of não é compatível com o Snowflake.
Gravidade¶
Crítico
Descrição¶
Algumas instruções, como UPDATE e DELETE, podem usar uma cláusula CURRENT ou OF dentro da cláusula WHERE, o que não é compatível atualmente pelo Snowflake.
Exemplo de código¶
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;
$$;
EWI relacionado¶
SSC-EWI-OR0036: Problemas de resolução de tipos; a operação aritmética pode não se comportar corretamente entre a cadeia de caracteres e a data
SSC-PRF-0004: Esta instrução utiliza um cursor para o loop.
SSC-EWI-OR0110: A cláusula For Update não é compatível com o Snowflake.
Práticas recomendadas¶
Projete novamente a consulta para
UPDATEouDELETEnormal, especificando as colunas na cláusulaWHERE. Considere que, se houver registros duplicados na tabela, a consulta poderá afetá-los várias vezes.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-OR0137¶
A referência ao atributo Type pode não ser compatível; portanto, foi transformada em um tipo de dados Variant.
Gravidade¶
Crítico
Descrição¶
TYPE ATTRIBUTE “TYPEUSED%TYPE” MIGHT BE UNSUPPORTED, SO IT WAS TRANSFORMED TO VARIANT
Exemplo de código¶
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;
$$;
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com