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

  • START WITH LIMIT VALUE, que é específica para identity_options, e só pode ser utilizada com ALTER TABLE MODIFY. Se você especificar START WITH LIMIT 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 + INCREMENT BY integer para sequências crescentes ou a marca d’água alta – INCREMENT BY integer para sequências decrescentes.

ALTER TABLE ORACLE

Exemplo de código

Código de entrada:
 CREATE SEQUENCE SEQUENCE1
  START WITH LIMIT VALUE;
Copy
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"}}';
Copy

Práticas recomendadas

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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);
Copy
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);
Copy

Práticas recomendadas

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;
Copy
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;
Copy

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;
Copy
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;
Copy
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);
Copy
Código gerado:
 --!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
                                           ;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

Nota

Observe que «iw-iyyy» não é um formato compatível.

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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);
Copy
Código gerado:
 SELECT * FROM
table1
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0010 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE. IT REQUIRES MANUAL FIX ***/!!!
        PARTITION(col1);
Copy

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" ...

Copy

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;
Copy
Código gerado:
 SELECT
TO_NUMBER('12.48', '99.99', 38, 2)
FROM DUAL;
Copy
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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

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;
Copy
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;
Copy

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>')));
Copy
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>')));
Copy

Práticas recomendadas

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;
Copy
Código gerado:
 SELECT
REGEXP_INSTR('CORPORATE FLOOR','OR', -3, 2) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0020 - NEGATIVE VALUES NOT SUPPORTED FOR FUNCTION ***/!!! FROM DUAL;
Copy

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
Snowflake Scripting:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0026 - ROWID NOT SUPPORTED ***/!!!
 QUERY_NAME.ROWID from
 TABLE1;
Copy

Práticas recomendadas

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;
Copy
Código gerado:
 SELECT
PUBLIC.TO_NUMBER_UDF('2,00', 0) "Value" FROM DUAL;
Copy

Práticas recomendadas

  • Você pode criar UDF para emular o comportamento do valor DEFAULT ON 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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

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;
Copy
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;
Copy

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

Nota

Observe que a operação entre uma cadeia de caracteres e uma data pode não se comportar corretamente.

Práticas recomendadas

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;
Copy
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;
Copy

Recomendação

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;
Copy
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;
Copy

Práticas recomendadas

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)
();
Copy
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)
();
Copy

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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
Copy
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;
Copy

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;
Copy
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;
Copy

O último exemplo não causa um erro no Snowflake, e a saída será equivalente se for executado.

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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;
/
Copy
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;
$$;
Copy

Práticas recomendadas

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;
Copy
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
  ;
$$;
Copy

Nota

Algumas partes dos códigos de saída foram omitidas para torná-los mais legíveis.

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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);
Copy
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);
Copy

Práticas recomendadas

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;
Copy
 CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Copy
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"}}';
Copy
 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"}}';
Copy

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;
Copy
Snowflake Scripting:
 select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0069 - THE SEQUENCE CURRVAL PROPERTY IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
 seq1.currval from dual;
Copy

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

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 ALL e EXCEPT 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
);
Copy

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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;
Copy
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
    ;
$$;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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`)*/
    ;
$$;
Copy

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;
Copy
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;
Copy

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;
Copy
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;
Copy
  • 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;
Copy
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;
Copy
  • Quando a condição REGEXP_LIKE vem 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(+);
Copy
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(+);
Copy

Práticas recomendadas

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;
Copy
Resultado
COL1|COL2|COL3|
----+----+----+
 555| 560| 600|

Copy
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;
Copy
Resultado
 |COL1|COL2|COL3|
|----|----|----|
|555 |555 |555 |
Copy

Práticas recomendadas

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;
Copy
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;
Copy

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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;
Copy
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;
$$;
Copy

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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_control

  • values_of_control

  • indices_of_control

  • pairs_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;
Copy
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;
$$;
Copy

Práticas recomendadas

  • Reescreva a condição FOR LOOP ou use um tipo diferente de LOOP para 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;
Copy
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;
$$;
Copy

Práticas recomendadas

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') );
Copy
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') );
Copy

Práticas recomendadas

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') );
Copy
Resultado
URL                                                                                                   |
------------------------------------------------------------------------------------------------------+
https://thecompany.snowflakecomputing.com/api/files/CODETEST/PUBLIC/MY_STAGE/%2Fmydirectory%2Fmyfile.jpg|

Copy

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.

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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;
Copy
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;
$$;
Copy
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;
$$;
Copy

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

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);
Copy
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);
Copy

Práticas recomendadas

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;
Copy
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;
Copy

Práticas recomendadas

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;
Copy
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;
Copy

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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

%FOUND

Pode ser emulado

%NOTFOUND

Pode ser emulado

%ISOPEN

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;
Copy
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;
$$;
Copy

Práticas recomendadas

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;
Copy
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;
$$;
Copy

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;
Copy
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;
$$;
Copy

EWI relacionado

  1. 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';
Copy
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';
Copy

Práticas recomendadas

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;
Copy
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;
$$;
Copy

EWI relacionado

  1. 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

  2. SSC-PRF-0004: Esta instrução utiliza um cursor para o loop.

  3. SSC-EWI-OR0110: A cláusula For Update não é compatível com o Snowflake.

Práticas recomendadas

  • Projete novamente a consulta para UPDATE ou DELETE normal, especificando as colunas na cláusula WHERE. 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;
Copy
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;
  $$;
Copy

Práticas recomendadas