SnowConvert: Diferenças funcionais do Oracle¶
SSC-FDM-OR0001¶
Nota
Esse mecanismo de detecção de recursos (FDM) está obsoleto e foi projetado para uma versão mais antiga do Oracle SnowConvert.
Uma descrição¶
Esse erro ocorre quando há um problema na gravação do arquivo do relatório de avaliação. O sistema não consegue salvar ou gerar os detalhes da avaliação corretamente.
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0002¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0068
Descrição¶
Esse erro ocorre quando o valor de START WITH
é maior do que o valor máximo permitido pelo Snowflake. De acordo com a documentação do Snowflake, o valor inicial da sequência deve estar dentro do intervalo de um inteiro complemento de dois de 64 bits: de -2^63
a 2^63-1
. Isso significa que os valores máximos permitidos são:
Números positivos: 9223372036854775807
Números negativos: 9223372036854775808
Exemplo de código¶
Código de entrada:¶
CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Código gerado:¶
CREATE OR REPLACE SEQUENCE SEQUENCE1
--** SSC-FDM-OR0002 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. **
START WITH 9223372036854775808
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
CREATE OR REPLACE SEQUENCE SEQUENCE2
--** SSC-FDM-OR0002 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. **
START WITH -9223372036854775809
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
Práticas recomendadas¶
Recomendamos redefinir a sequência e ajustar como ela é usada. NOTE: Certifique-se de que a coluna de destino tenha capacidade suficiente para armazenar esse valor.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0003¶
Nota
Este FDM foi descontinuado. Para obter mais informações, consulte a documentação de SSC-EWI-OR0038.
Descrição¶
A search_clause
controla como as linhas são processadas em uma instrução SELECT definindo sua ordem. Embora esse recurso permita que você personalize a forma como os dados são percorridos e retornados no Oracle, ele não está disponível no Snowflake.
No Oracle e em bancos de dados semelhantes, a search_clause
ajuda a controlar como os dados hierárquicos são processados em consultas recursivas ou Common Table Expressions (CTEs). Quando você especifica colunas na search_clause
, pode escolher se deseja processar os dados em profundidade primeiro (aprofundando-se em cada ramo) ou em amplitude primeiro (processando nível por nível), o que determina a ordem dos resultados.
No Snowflake, uma mensagem search_clause
será gerada e depois removida.
Exemplo de código¶
Código de entrada:¶
WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(SELECT aValue from atable) SEARCH DEPTH FIRST BY hire_date SET order1 SELECT aValue from atable;
Código gerado:¶
WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(
SELECT aValue from
atable
) /*** SSC-FDM-OR0003 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/
SELECT aValue from
atable;
Recomendação¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0004¶
Descrição¶
No Oracle, a cláusula ORDER BY SIBLINGS é usada em consultas hierárquicas para manter a estrutura hierárquica ao classificar registros irmãos (registros no mesmo nível). Esse recurso não está disponível no Snowflake.
Exemplo de código¶
Código de entrada:¶
SELECT LEVEL,
LPAD(' ', 2 * (LEVEL - 1)) || NAME AS FORMATTED_NAME,
JOB_TITLE
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID
ORDER SIBLINGS BY NAME;
Código gerado:¶
SELECT LEVEL,
NVL(
LPAD(' ', 2 * (
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!LEVEL - 1)) :: STRING, '') || NVL(NAME :: STRING, '') AS FORMATTED_NAME,
JOB_TITLE
FROM
EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY
PRIOR EMPLOYEE_ID = MANAGER_ID
ORDER BY
NAME /*** SSC-FDM-OR0004 - SIBLINGS KEYWORD REMOVED FROM ORDER BY CLAUSE BECAUSE SNOWFLAKE DOES NOT SUPPORT IT ***/;
Embora a ordenação exata fornecida pela cláusula SIBLINGS não esteja diretamente disponível, você pode obter resultados semelhantes usando esses métodos:
Envolva sua consulta em outra consulta e use
ORDER BY
para classificar os resultados.Primeiro, crie uma expressão de tabela comum (CTE) contendo sua consulta hierárquica com
CONNECT BY
. Em seguida, crie outra consulta que faça referência a esse CTE e useORDER BY
para classificar os irmãos (linhas no mesmo nível hierárquico).
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0005¶
Descrição¶
O Snowflake não oferece suporte a sinônimos. Todos os sinônimos serão convertidos em seus nomes de objeto originais.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE TABLE1
(
COLUMN1 NUMBER
);
CREATE OR REPLACE SYNONYM B.TABLE1_SYNONYM FOR TABLE1;
SELECT * FROM B.TABLE1_SYNONYM WHERE B.TABLE1_SYNONYM.COLUMN1 = 20;
Código gerado:¶
CREATE OR REPLACE TABLE TABLE1
(
COLUMN1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
-- --** SSC-FDM-OR0005 - SYNONYMS NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS SYNONYM WERE CHANGED BY THE ORIGINAL OBJECT NAME. **
-- CREATE OR REPLACE SYNONYM B.TABLE1_SYNONYM FOR TABLE1
;
SELECT * FROM
TABLE1
WHERE
TABLE1.COLUMN1 = 20;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0006¶
Descrição¶
Esse aviso aparece quando uma restrição de coluna NOT NULL inclui um dos estados de restrição da Oracle na definição inline da coluna.
[ RELY | NORELY | RELY DISABLE | RELY ENABLE | VALIDATE | NOVALIDATE ]
Como o Snowflake não é compatível com esses estados, a restrição em linha NOT NULL
será removida.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE Table1(
col1 INT NOT NULL RELY
);
Código gerado:¶
CREATE OR REPLACE TABLE Table1 (
col1 INT NOT NULL /*** SSC-FDM-OR0006 - CONSTRAINT STATE RELY REMOVED FROM NOT NULL INLINE CONSTRAINT ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0007¶
Descrição¶
O Snowflake não oferece suporte a controle de versão de objetos. Como resultado, os modificadores EDITIONABLE ou NONEDITIONABLE são removidos durante a conversão do código, e uma mensagem de aviso é gerada.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE EDITIONABLE PROCEDURE FUN1 (n number)is
l_result number;
begin
DELETE FROM employees;
end;
Código gerado:¶
--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE FUN1 (n NUMBER(38, 18))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
l_result NUMBER(38, 18);
BEGIN
DELETE FROM
employees;
END;
$$;
Práticas recomendadas¶
Considere métodos diferentes para gerenciar versões de código.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0008¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0071.
Descrição¶
O quantificador “all” não é compatível com o Snowflake SQL. Ao converter seu código, esse modificador será removido e você receberá uma mensagem de aviso. Observe que essa modificação pode fazer com que sua consulta produza resultados diferentes dos esperados.
Exemplo de código¶
Código de entrada:¶
SELECT location_id FROM locations
MINUS ALL
SELECT location_id FROM departments;
Código gerado:¶
SELECT location_id FROM
locations
--** SSC-FDM-OR0008 - QUANTIFIER 'ALL' NOT SUPPORTED FOR THIS SET OPERATOR, RESULTS MAY DIFFER **
MINUS
SELECT location_id FROM
departments;
No Snowflake, os operadores INTERSECT
e MINUS/EXCEPT
removem automaticamente os valores duplicados do conjunto de resultados.
Práticas recomendadas¶
Explore as opções equivalentes do Snowflake para substituir a funcionalidade do quantificador «all».
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0009¶
Descrição¶
Nota
Para gerar procedimentos e macros em JavaScript, adicione -t JavaScript
ou --PLTargetLanguage JavaScript
ao seu comando.
Nota
Para maior clareza, simplificamos algumas seções do código de saída.
Esse aviso aparece quando são usados os valores do cursor implícito SQL. O Oracle trata esses valores de forma diferente com base no tipo de consulta:
Para instruções em
SELECT
: O valor representa o número de linhas retornadasPara as instruções
UPDATE
,CREATE
,DELETE
, ouINSERT
: O valor representa o número de linhas afetadas
Essa diferença de comportamento é o motivo pelo qual o aviso é exibido.
Exemplo de código¶
Código de entrada:¶
-- Additional Params: -t JavaScript
--Transformation for implicit cursor
CREATE OR REPLACE PROCEDURE SP_SAMPLE AUTHID DEFINER IS
stmt_no POSITIVE;
BEGIN
IF SQL%ROWCOUNT = 0 THEN
EXIT ;
END IF;
IF SQL%ISOPEN THEN
EXIT ;
END IF;
IF SQL%FOUND THEN
EXIT ;
END IF;
IF SQL%NOTFOUND THEN
EXIT ;
END IF;
END;
Código gerado:¶
-- Additional Params: -t JavaScript
--Transformation for implicit cursor
CREATE OR REPLACE PROCEDURE SP_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 Helpers Code section is omitted.
let STMT_NO = new POSITIVE();
if (SQL.ROWCOUNT /*** SSC-FDM-OR0009 - SQL IMPLICIT CURSOR VALUES MAY DIFFER ***/ == 0) {
break;
}
if (SQL.ISOPEN) {
break;
}
if (SQL.FOUND) {
break;
}
if (SQL.NOTFOUND) {
break;
}
$$;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0010¶
Descrição¶
O tipo de dados NUMBER
é usado para armazenar números de ponto fixo e flutuante. Ele funciona de forma consistente em todos os sistemas operacionais que executam o Oracle Database. A Oracle recomenda usar o tipo de dados NUMBER
como a principal opção para armazenar valores numéricos. O formato é NUMBER (X, Y)
, em que _ X _ representa a precisão (número total de dígitos) e _ Y _ representa a escala (número de casas decimais).
Por exemplo, NUMBER(5, 3)
representa um formato de número com _ 2 _ dígitos antes do ponto decimal e _ 3 _ dígitos após o ponto decimal.
12.345
Outras considerações importantes:
Scale _ Y _ determina quantas casas decimais aparecerão após o ponto decimal.
Scale-Precision _ Y-X _ define o número mínimo de zeros à direita após o ponto decimal.
Essa mensagem aparece quando um tipo de dados NUMBER
tem um valor de precisão menor que o valor de escala. Como o Snowflake não oferece suporte a essa configuração, o valor da precisão é aumentado automaticamente para manter a consistência dos dados.
Nota
Observe que esse problema pode ocorrer em combinação com outras transformações conhecidas ou pode não ocorrer. Por exemplo, quando a escala for substituída por dezenove e a precisão anterior for maior que dezenove, essa mensagem NOT será exibida.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE SampleNumberTable(Col1 NUMBER(4, 5));
INSERT INTO SampleNumberTable (Col1)
VALUES (0.00009);
INSERT INTO SampleNumberTable (Col1)
VALUES (0.000021);
INSERT INTO SampleNumberTable (Col1)
VALUES (0.012678912);
SELECT * FROM SampleNumberTable;
Col1 |
-------+
0.00009|
0.00002|
0.01268|
Código gerado:¶
CREATE OR REPLACE TABLE SampleNumberTable (Col1 NUMBER(5, 5) /*** SSC-FDM-OR0010 - NUMBER DATATYPE SMALLER PRECISION WAS INCREASED TO MATCH SCALE ***/ /*** 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 SampleNumberTable(Col1)
VALUES (0.00009);
INSERT INTO SampleNumberTable(Col1)
VALUES (0.000021);
INSERT INTO SampleNumberTable(Col1)
VALUES (0.012678912);
SELECT * FROM
SampleNumberTable;
Col1 |
-------+
0.00009|
0.00002|
0.01268|
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0011¶
Descrição¶
Esse aviso aparece quando o processo de migração remove o terceiro argumento opcional de RAISE_APLICATION_ERROR, pois esse recurso não está disponível no Snowflake.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE FUNCTION TEST(SAMPLE_A IN NUMBER DEFAULT NULL,
SAMPLE_B IN NUMBER DEFAULT NULL)
RETURN NUMBER
AS
BEGIN
raise_application_error(-20001, 'First exception message', FALSE);
RETURN 1;
END TEST;
Código gerado:¶
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE TEST(SAMPLE_A NUMBER(38, 18) DEFAULT NULL,
SAMPLE_B NUMBER(38, 18) DEFAULT NULL)
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
FIRST_EXCEPTION_MESSAGE_EXCEPTION_CODE_0 EXCEPTION (-20001, 'FIRST EXCEPTION MESSAGE');
BEGIN
--** SSC-FDM-OR0011 - ADD TO STACK OF ERRORS IS NOT SUPPORTED, BOOLEAN ARGUMENT FALSE WAS REMOVED. **
RAISE FIRST_EXCEPTION_MESSAGE_EXCEPTION_CODE_0;
RETURN 1;
END;
$$;
Práticas recomendadas¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0012¶
Descrição¶
Antes de usar as instruções COMMIT e ROLLBACK no Snowflake, você deve primeiro executar instruções específicas de configuração para garantir que funcionem corretamente. Essas instruções exigem uma configuração adequada para funcionar como esperado.
ALTER SESSION SET AUTOCOMMIT = false;
Exemplo de código¶
Código de entrada¶
COMMIT;
ROLLBACK;
Código de saída¶
--** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT;
--** SSC-FDM-OR0012 - ROLLBACK REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
ROLLBACK;
Práticas recomendadas¶
Execute a consulta fornecida na seção de descrição antes de executar seu código.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com.
SSC-FDM-OR0013¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0039.
Descrição¶
Essa mensagem aparece quando o SnowConvert detecta uma consulta que contém uma cláusula CYCLE. Como o Snowflake não é compatível com as cláusulas CYCLE, o SnowConvert comenta automaticamente esse código durante a conversão.
Essa instrução indica quando ocorre uma operação recursiva.
Para obter informações adicionais sobre a funcionalidade da cláusula, consulte a documentação.
Exemplo de código¶
Conectar por¶
Código de entrada:¶
CREATE OR REPLACE FORCE NONEDITIONABLE VIEW VIEW01 AS
SELECT
UNIQUE A.*
FROM
TABLITA A
WHERE
A.X = A.C CONNECT BY NOCYCLE A.C = 0 START WITH A.B = 1
HAVING
X = 1
GROUP BY
A.C;
Código gerado:¶
CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
SELECT DISTINCT
A.*
FROM
TABLITA A
WHERE
A.X = A.C
GROUP BY
A.C
HAVING
X = 1
--** SSC-FDM-OR0013 - CYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE **
CONNECT BY
A.C = 0 START WITH A.B = 1;
Práticas recomendadas¶
Se sua hierarquia de dados contiver ciclos, consulte este artigo para obter orientação sobre como lidar com eles.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0014¶
Descrição¶
Esse erro ocorre quando o tipo de dados de uma chave estrangeira não corresponde ao tipo de dados da coluna referenciada.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE "MyDb"."MyTable"
(
"COL1" NUMBER,
CONSTRAINT "PK" PRIMARY KEY ("COL1")
);
CREATE TABLE "MyDb"."MyTable1"
(
"COL1" NUMBER(*,0),
CONSTRAINT "FK1" FOREIGN KEY ("COL1") REFERENCES "MyDb"."MyTable" ("COL1")
);
Código gerado:¶
CREATE OR REPLACE TABLE "MyDb"."MyTable"
(
"COL1" NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
CONSTRAINT "PK" PRIMARY KEY ("COL1")
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE TABLE "MyDb"."MyTable1"
(
"COL1" NUMBER(38) /*** 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"}}'
;
ALTER TABLE "MyDb"."MyTable1"
ADD
--** SSC-FDM-OR0014 - FOREIGN KEY DATA TYPE MISMATCH **
CONSTRAINT "FK1" FOREIGN KEY ("COL1") REFERENCES "MyDb"."MyTable" ("COL1");
Nota
O erro ocorre porque as colunas «COL1» em «MyDb».»MyTable1» e «MyDb».»MyTable» têm tipos de dados diferentes.
Práticas recomendadas¶
Se sua hierarquia de dados contiver ciclos, consulte este artigo para obter orientação sobre como lidar com eles.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0015¶
Descrição¶
Esse problema ocorre quando se usa a função LENGTHB que calcula o tamanho de uma coluna ou valor literal em bytes. Durante a migração, essa função é automaticamente convertida para a função OCTET_LENGTH do Snowflake.
Ao usar essa função com um parâmetro de coluna, ela calcula o tamanho do valor da coluna. O tamanho resultante pode ser diferente entre o Oracle e o Snowflake, pois depende do tipo de dados da coluna.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE char_table
(
char_column1 CHAR(15)
);
INSERT INTO char_table VALUES ('Hello world');
SELECT char_column1, LENGTHB(char_column1), LENGTH('Hello world') FROM char_table;
|CHAR_COLUMN1 |LENGTHB(CHAR_COLUMN1)|LENGTH('HELLOWORLD')|
|---------------|---------------------|--------------------|
|Hello world |15 |11 |
Código gerado:¶
CREATE OR REPLACE TABLE char_table
(
char_column1 CHAR(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO char_table
VALUES ('Hello world');
SELECT char_column1,
OCTET_LENGTH(char_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/, LENGTH('Hello world') FROM
char_table;
|CHAR_COLUMN1|OCTET_LENGTH(CHAR_COLUMN1)|LENGTH('HELLO WORLD')|
|------------|--------------------------|---------------------|
|Hello world |11 |11 |
Práticas recomendadas¶
Analise os tipos de dados usados em seu código.
Verifique a codificação da coluna, pois o OCTET_LENGTH pode mostrar tamanhos maiores para cadeias de caracteres que contêm caracteres Unicode.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0016¶
Descrição¶
COMMIT e ROLLBACK não são mais necessárias, pois o Snowflake lida com essas operações automaticamente.
Exemplo de código¶
Código de entrada¶
COMMIT WORK FORCE '22.57.53';
ROLLBACK WORK FORCE '22.57.53';
Código de saída¶
--** SSC-FDM-OR0016 - COMMIT OPTIONS REMOVED BECAUSE SNOWFLAKE DOES NOT REQUIRE THEM **
--** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT WORK;
--** SSC-FDM-OR0016 - ROLLBACK OPTIONS REMOVED BECAUSE SNOWFLAKE DOES NOT REQUIRE THEM **
--** SSC-FDM-OR0012 - ROLLBACK REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
ROLLBACK WORK;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0017¶
Descrição¶
A expressão AT TIME ZONE não é mais compatível com a palavra-chave DBTIMEZONE.
Exemplo de código¶
Código de entrada:¶
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE DBTIMEZONE FROM DUAL;
Código gerado:¶
SELECT
--** SSC-FDM-OR0017 - DBTIMEZONE WAS REMOVED TO USE THE DEFAULT VALUE OF THE TIMESTAMP **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
Práticas recomendadas¶
Defina o parâmetro de sessão TIMEZONE para garantir resultados consistentes.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0018¶
Descrição¶
Esse aviso indica que pode haver diferenças funcionais entre a instrução merge do Oracle e a implementação da instrução merge do Snowflake.
Exemplo de código¶
Código de entrada:¶
MERGE INTO people_target pt
USING people_source ps
ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
DELETE where pt.title = 'Mrs.'
WHEN NOT MATCHED THEN INSERT
(pt.person_id, pt.first_name, pt.last_name, pt.title)
VALUES (ps.person_id, ps.first_name, ps.last_name, ps.title)
WHERE ps.title = 'Mr';
Código gerado:¶
--** SSC-FDM-OR0018 - SNOWFLAKE MERGE STATEMENT MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE **
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "people_target", "people_source" **
MERGE INTO people_target pt
USING people_source ps
ON (pt.person_id = ps.person_id)
WHEN MATCHED AND pt.title = 'Mrs.' THEN
DELETE
WHEN MATCHED THEN
UPDATE SET
pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
WHEN NOT MATCHED AND ps.title = 'Mr' THEN
INSERT
(pt.person_id, pt.first_name, pt.last_name, pt.title)
VALUES (ps.person_id, ps.first_name, ps.last_name, ps.title);
Práticas recomendadas¶
Se seus resultados forem diferentes dos do Oracle, considere estas etapas:
Revise as prioridades da ordem de execução no link
Execute quaisquer instruções DML ignoradas antes ou depois da instrução merge, conforme apropriado
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0019¶
Descrição¶
Esse aviso aparece quando uma unidade de quadro de janela ROWS é detectada em seu código-fonte.
A função ROWS depende da ordem física das linhas no banco de dados, que pode variar ao migrar para uma plataforma diferente. Para evitar inconsistências, você pode adicionar cláusulas ORDER BY explícitas para garantir uma ordenação consistente das linhas.
Nota
De acordo com a documentação da Oracle, as funções analíticas se comportam de forma diferente com base em seu tipo de deslocamento:
As funções de deslocamento lógico sempre retornam resultados determinísticos
As funções de deslocamento físico podem retornar resultados não determinísticos, a menos que você garanta uma ordenação exclusiva
Para obter uma ordenação exclusiva, talvez você precise incluir várias colunas na cláusula
order_by_clause
Recomenda-se verificar se a função produz resultados consistentes (determinísticos) antes de prosseguir, para evitar possíveis problemas.
Exemplo de código¶
Código de entrada:¶
SELECT
SUM(C_BIRTH_DAY)
OVER (
ORDER BY C_BIRTH_COUNTRY
ROWS UNBOUNDED PRECEDING) AS MAX1
FROM WINDOW_TABLE;
Código gerado:¶
SELECT
SUM(C_BIRTH_DAY)
OVER (
ORDER BY C_BIRTH_COUNTRY ROWS UNBOUNDED PRECEDING /*** SSC-FDM-OR0019 - WINDOW FRAME OUTPUT MAY NOT BE EQUIVALENT ***/) AS MAX1
FROM
WINDOW_TABLE;
Práticas recomendadas¶
Adicione uma cláusula ORDER BY às suas consultas para garantir a ordenação consistente das linhas nos resultados do Snowflake.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0020¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0051.
Descrição¶
Esse aviso aparece ao usar a função PRAGMA EXCEPTION_INIT em um procedimento. O nome da exceção e o código de erro SQL são definidos na função RAISE. Durante a conversão para o Snowflake Scripting, o código de erro SQL é incluído na declaração de exceção. No entanto, alguns códigos de erro podem não ser válidos no Snowflake Scripting.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
NEW_EXCEPTION EXCEPTION;
PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
NEW_EXCEPTION2 EXCEPTION;
PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
BEGIN
IF true THEN
RAISE NEW_EXCEPTION;
END IF;
EXCEPTION
WHEN NEW_EXCEPTION THEN
--Handle Exceptions
NULL;
END;
/
Código gerado:¶
Snowflake Scription¶
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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0097 - PROCEDURE PROPERTIES ARE NOT SUPPORTED IN SNOWFLAKE PROCEDURES ***/!!!
AS
$$
DECLARE
--** SSC-FDM-OR0023 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS **
NEW_EXCEPTION EXCEPTION;
--** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
NEW_EXCEPTION2 EXCEPTION (-20100, '');
--** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
BEGIN
IF (true) THEN
RAISE NEW_EXCEPTION;
END IF;
EXCEPTION
WHEN NEW_EXCEPTION THEN
--Handle Exceptions
NULL;
END;
$$;
Práticas recomendadas¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0021¶
Descrição¶
A condição FOR LOOP
no Snowflake Scripting requer um valor INTEGER
ou uma expressão que resulte em um INTEGER
. Se você usar números de ponto flutuante, eles serão arredondados automaticamente, o que pode alterar o limite do loop pretendido.
O limite inferior será arredondado para o número inteiro mais próximo. Por exemplo:
3.1 -> 3, 6.7 -> 7, 4.5 -> 5
O limite superior será arredondado para o número inteiro mais próximo. Por exemplo:
3.1 -> 3, 6.7 -> 6, 4.5 -> 4
CREATE OR REPLACE PROCEDURE p1()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
DECLARE
var1 VARCHAR DEFAULT '';
var2 VARCHAR DEFAULT '';
var3 VARCHAR DEFAULT '';
BEGIN
--Loop 1
FOR i IN 1.2 TO 5.2 DO
var1 := var1 || ' ' || i::VARCHAR;
END FOR;
--Loop 2
FOR i IN 1.7 TO 5.5 DO
var2 := var2 || ' ' || i::VARCHAR;
END FOR;
--Loop 3
FOR i IN 1.5 TO 5.8 DO
var3 := var3 || ' ' || i::VARCHAR;
END FOR;
RETURN ' Loop1: ' || var1 ||
' Loop2: ' || var2 ||
' Loop3: ' || var3;
END;
$$;
CALL p1();
P1 |
--------------------------------------------------+
Loop1: 1 2 3 4 5 |
Loop2: 2 3 4 5 |
Loop3: 2 3 4 5 |
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE p1
AS
BEGIN
FOR i NUMBER(5,1) IN 1.2 .. 5.7 LOOP
NULL;
END LOOP;
END;
Código gerado:¶
CREATE OR REPLACE PROCEDURE p1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-OR0021 - FOR LOOP WITH FLOAT NUMBER AS LOWER OR UPPER BOUND MAY NOT BEHAVE CORRECTLY IN SNOWFLAKE SCRIPTING **
FOR i IN 1.2 TO 5.7 LOOP
NULL;
END LOOP;
END;
$$;
Práticas recomendadas¶
Altere a condição FOR LOOP para usar valores inteiros em vez de outros tipos de dados.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0022¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0100.
Descrição¶
O FOR LOOP
do Snowflake Scripting suporta apenas uma condição, ao contrário do Oracle, que permite várias condições. Ao migrar do Oracle, somente a primeira condição será transformada, e todas as condições adicionais serão ignoradas.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE P3
AS
BEGIN
FOR i IN REVERSE 1..3,
REVERSE i+5..i+7
LOOP
NULL;
END LOOP;
END;
Código gerado:¶
CREATE OR REPLACE PROCEDURE P3 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-OR0022 - FOR LOOP WITH MULTIPLE CONDITIONS IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING **
FOR i IN REVERSE 1 TO 3 LOOP
NULL;
END LOOP;
END;
$$;
Práticas recomendadas¶
Divida as instruções complexas do
FOR LOOP
em vários loops mais simples ou reescreva a condição do loop para maior clareza.Para obter assistência adicional, entre em contato com nossa equipe de suporte pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0023¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0099.
Descrição¶
Esse aviso aparece quando um número de código de exceção está fora do intervalo permitido para exceções do Snowflake Scripting. Os códigos de exceção válidos devem ser números inteiros entre -20000 e -20999.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE procedure_exception
IS
my_exception EXCEPTION;
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
NULL;
END;
Código gerado:¶
CREATE OR REPLACE PROCEDURE procedure_exception ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
--** SSC-FDM-OR0023 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS **
my_exception EXCEPTION;
--** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
NULL;
END;
$$;
Práticas recomendadas¶
Verifique se o seu código de exceção está dentro do intervalo permitido pelo Snowflake Scripting. Caso contrário, selecione um número de exceção disponível diferente.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0024¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0002.
Descrição¶
Esse erro ocorre quando o sistema não consegue resolver as colunas em uma expressão Select. Isso geralmente acontece em dois cenários:
Ao fazer referência a um Type Access que não foi resolvido
Ao usar uma coluna com um tipo definido pelo usuário que não tenha definições de coluna (por exemplo, um tipo sem corpo ou um tipo de objeto sem colunas definidas)
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE record_unknown_table_proc
AS
unknownTable_variable_rowtype unknownTable%ROWTYPE;
BEGIN
INSERT INTO MyTable values unknownTable_variable_rowtype;
END;
Código gerado:¶
CREATE OR REPLACE PROCEDURE record_unknown_table_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
unknownTable_variable_rowtype OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
BEGIN
INSERT INTO MyTable
SELECT
null /*** SSC-FDM-OR0024 - COLUMNS FROM EXPRESSION unknownTable%ROWTYPE NOT FOUND ***/;
END;
$$;
Práticas recomendadas¶
Verificar se a definição de tipo referenciada contém definições de coluna.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0025¶
Descrição¶
A restrição NOT NULL
, que é usada em declarações de variáveis Oracle dentro de procedimentos, não está disponível em declarações de variáveis de procedimentos Snowflake.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE PROC04
IS
var3 FLOAT NOT NULL := 100;
BEGIN
NULL;
END;
Código gerado:¶
CREATE OR REPLACE PROCEDURE PROC04 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var3 FLOAT := 100 /*** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE ***/;
BEGIN
NULL;
END;
$$;
Recomendações¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0026¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0045.
Descrição¶
Esse erro ocorre quando você tenta converter dados em um tipo de dados não suportado.
Exemplo¶
Código de entrada:¶
select cast(' $123.45' as number, 'L999.99') from dual;
Código gerado:¶
select
--** SSC-FDM-OR0026 - CAST TYPE NOT SUPPORTED **
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER ' $123.45' IS NOT SUPPORTED ***/!!!
cast(' $123.45' as NUMBER(38, 18) , 'L999.99') from dual;
EWIs relacionados¶
SSC-EWI-OR0011: O parâmetro “format” não pode ser usado nesse contexto.
Recomendações¶
A operação de conversão é transformada em uma função definida pelo usuário (UDF/Stub), o que permite personalizar o comportamento da função de conversão.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0027¶
Nota
Este FDM foi descontinuado. Para obter mais informações, consulte a documentação de SSC-EWI-OR0029.
Descrição¶
O Snowflake não é compatível com o recurso «Default on conversion error».
Exemplo de código¶
Código de entrada:¶
SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
Código de saída:¶
SELECT
--** SSC-FDM-OR0027 - DEFAULT ON CONVERSION ERROR NOT SUPPORTED IN SNOWFLAKE IN SNOWFLAKE **
TO_NUMBER('2,00') "Value" FROM DUAL;
Recomendações¶
Considere a possibilidade de criar uma função definida pelo usuário (UDF) para replicar a funcionalidade do valor
DEFAULT
ao lidar comON CONVERSION ERROR
.Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0028¶
Nota
Este FDM foi descontinuado. Para obter a documentação atualizada, consulte SSC-EWI-OR0031.
Descrição¶
Esse erro ocorre quando você tenta usar um parâmetro não suportado na função SYS_CONTEXT.
Exemplo de código¶
Código de entrada:¶
SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Código de saída:¶
SELECT
--** SSC-FDM-OR0028 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE **
SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Recomendações¶
A função é convertida em um stub de função definida pelo usuário (UDF), que pode ser modificado para replicar o comportamento do parâmetro SYS_CONTEXT.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0029¶
Descrição¶
A instrução ALTER SESSION contém uma cláusula ou configuração que não é compatível com a versão atual.
Exemplo de código¶
Código de entrada:¶
ALTER SESSION SET SQL_TRACE TRUE;
Código de saída:¶
----** SSC-FDM-OR0029 - THIS ALTER SESSION CONFIGURATION IS NOT SUPPORTED IN SNOWFLAKE **
--ALTER SESSION SET SQL_TRACE TRUE
;
Recomendações¶
Para encontrar variáveis de sessão equivalentes, consulte a documentação do Snowflake.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0030¶
Descrição¶
Quando uma consulta inclui ROWID como uma pseudocoluna, ela é convertida em NULL para evitar erros de tempo de execução, e uma mensagem de Erro, Aviso e Informação (EWI) é gerada. Atualmente, não há nenhum recurso disponível para replicar a funcionalidade de ROWID.
Exemplo de código¶
Código de entrada Oracle:¶
SELECT ROWID FROM T1;
Código de saída:¶
SELECT
--** SSC-FDM-OR0030 - ROWID PSEUDOCOLUMN IS NOT SUPPORTED IN SNOWFLAKE, IT WAS CONVERTED TO NULL TO AVOID RUNTIME ERRORS **
'' AS ROWID
FROM
T1;
Recomendações¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0031¶
Descrição¶
Esse erro indica que as instruções DML do Snowflake não suportam a cláusula error_logging, que é um recurso disponível nas instruções DML do Oracle.
Exemplo de código¶
Código de entrada:¶
MERGE INTO people_target pt
USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
LOG ERRORS;
Código de saída:¶
MERGE INTO people_target pt
USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN
UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
-- --** SSC-FDM-OR0031 - THE ERROR LOGGING CLAUSE IN DML STATEMENTS IS NOT SUPPORTED BY SNOWFLAKE **
--LOG ERRORS
;
Recomendações¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0032¶
Descrição¶
Esse aviso aparece ao usar a função STANDARD_HASH
do Oracle com parâmetros que não sejam cadeias de caracteres, pois ela pode produzir resultados diferentes quando migrada para o Snowflake.
Exemplo de código¶
Código de entrada:¶
SELECT STANDARD_HASH(1+1) FROM DUAL;
STANDARD_HASH(1+1) |
--------------------------------------------------+
E39323970701D93598FC1D357F4BF04578CE3242 |
Código de saída:¶
SELECT
--** SSC-FDM-OR0032 - STANDARD HASH FUNCTION WITH INPUT NON-STRING PARAMETER GENERATES A DIFFERENT RESULT IN SNOWFLAKE **
SHA1(1+1)
FROM DUAL;
SHA1(1+1) |
--------------------------------------------------+
da4b9237bacccdf19c0760cab7aec4a8359010b0 |
Recomendações¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0033¶
Descrição
Esse aviso aparece quando o SnowConvert migra uma função de pacote interna do Oracle DBMS_RANDOM.VALUE. A função definida pelo usuário (UDF) criada para replicar essa funcionalidade tem menor precisão em comparação com a função original do Oracle.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc
IS
var1 NUMBER;
BEGIN
SELECT DBMS_RANDOM.VALUE() INTO var1 FROM DUAL;
SELECT DBMS_RANDOM.VALUE(2,10) INTO var1 FROM DUAL;
END;
Código de saída:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 NUMBER(38, 18);
BEGIN
SELECT
--** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
DBMS_RANDOM.VALUE_UDF() INTO
:var1
FROM DUAL;
SELECT
--** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
DBMS_RANDOM.VALUE_UDF(2,10) INTO
:var1
FROM DUAL;
END;
$$;
Recomendações¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0034¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte a documentação SSC-EWI-OR0001.
Descrição¶
Esse erro ocorre quando o valor na instrução START WITH
é definido como LIMIT VALUE
.
No Oracle, essa cláusula só é usada com a instrução ALTER TABLE.
A opção
START WITH LIMIT VALUE
, que só está disponível paraidentity_options
, só pode ser usada comALTER TABLE MODIFY
. Quando você usaSTART WITH LIMIT VALUE
, o Oracle Database faz o seguinte:
Bloqueia a tabela
Encontre o valor máximo (para sequências crescentes) ou o valor mínimo (para sequências decrescentes) na coluna de identidade
Define esse valor como a marca d’água mais alta do gerador de sequência
Gere o próximo valor adicionando o valor de
INCREMENT BY
à marca d’água alta (para sequências crescentes) ou subtraindo-o (para sequências decrescentes)
ALTER TABLE ORACLE¶
Exemplo de código¶
Código de entrada:¶
CREATE SEQUENCE SEQUENCE1
START WITH LIMIT VALUE;
Código de saída:¶
CREATE OR REPLACE SEQUENCE SEQUENCE1
--** SSC-FDM-OR0034 - 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"}}';
Recomendações¶
Você não precisa fazer nada.
Para obter ajuda adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0035¶
Descrição¶
Esse aviso aparece quando o SnowConvert migra uma função de pacote interna do Oracle DBMS_OUTPUT.PUT_LINE
. Você deve revisar a função definida pelo usuário gerada (UDF) para garantir que ela funcione conforme o esperado.
Essa mensagem de aviso indica que você precisa revisar a implementação de DBMS_OUTPUT.PUT_LINE_UDF
para obter informações adicionais.
Aviso
Essa UDF pode afetar o desempenho. Para ativar o registro, descomente o código de implementação. Observe que a configuração atual usa uma tabela temporária. Se você precisar que os dados persistam entre as sessões, remova a palavra-chave TEMPORARY da instrução CREATE TABLE.
Depois de executar a função DBMS_OUTPUT.PUT_LINE_UDF
, você pode visualizar todos os logs executando esta consulta:
SELECT * FROM DBMS_OUTPUT.DBMS_OUTPUT_LOG
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE builtin_package_call
IS
BEGIN
DBMS_OUTPUT.PUT_LINE(1);
DBMS_OUTPUT.PUT_LINE("Test");
END;
Código de saída:¶
CREATE OR REPLACE PROCEDURE builtin_package_call ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF(1);
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF("Test");
END;
$$;
Recomendações¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0036¶
Descrição¶
Essa mensagem aparece quando o SnowConvert remove determinados argumentos durante a migração de um procedimento de pacote ou função interna do Oracle.
Os parâmetros originais que não têm equivalentes correspondentes no Snowflake, ou que não são mais necessários, serão removidos do código convertido. No entanto, esses parâmetros são documentados nas mensagens EWI para fins de referência e rastreamento.
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc
IS
w_file UTL_FILE.FILE_TYPE;
BEGIN
w_file:= UTL_FILE.FOPEN('MY_DIR','test.txt','W',32760);
UTL_FILE.PUT_LINE(w_file,'New line');
END;
Código de saída:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
w_file OBJECT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'UTL_FILE.FILE_TYPE' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/ := OBJECT_CONSTRUCT();
BEGIN
--** SSC-FDM-OR0036 - PARAMETERS: 'LOCATION, MAX_LINESIZE_UDF' UNNECESSARY IN THE IMPLEMENTATION. **
CALL UTL_FILE.FOPEN_UDF('test.txt', 'W');
SELECT
*
INTO
w_file
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
--** SSC-FDM-OR0036 - PARAMETERS: 'AUTOFLUSH_UDF' UNNECESSARY IN THE IMPLEMENTATION. **
CALL UTL_FILE.PUT_LINE_UDF(:w_file, 'New line');
END;
$$;
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0037¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0004.
Nota
Para facilitar a leitura, simplificamos algumas seções do código neste exemplo.
Descrição¶
Esse aviso aparece quando uma instrução SELECT contém uma cláusula que o Snowflake não suporta. As cláusulas a seguir não são suportadas:
Bancos de dados em contêineres e bancos de dados plugáveis
Limitações no uso de subconsultas
Estruturas de dados hierárquicos e consultas
Modificações externas da tabela
Links de banco de dados e conexões entre bancos de dados
Configurações de sharding de banco de dados
Particionamento de tabelas
Subpartição de tabelas
Operações de consulta hierárquica
Exemplo de código¶
Código de entrada:¶
SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Código de saída:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
SELECT * FROM
TABLE1
-- --** SSC-FDM-OR0037 - THE 'OPTIONAL MODIFIED EXTERNAL' SYNTAX IN SELECT IS NOT SUPPORTED IN SNOWFLAKE **
-- EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED)
;
Recomendações¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0038¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0128.
Descrição¶
Essa mensagem indica que um atributo de cursor booliano não pode ser usado no SnowScript, seja porque não é compatível ou porque não há funcionalidade equivalente. A tabela abaixo lista os atributos do cursor booliano que podem ser replicados no SnowScript:
Atributo Boolean Cursor |
Status |
---|---|
|
Pode ser emulado |
|
Pode ser emulado |
|
Não suportado |
Exemplo de código¶
Código de entrada:¶
CREATE OR REPLACE PROCEDURE cursor_attributes_proc
IS
is_open_attr BOOLEAN;
found_attr BOOLEAN;
my_record table1%ROWTYPE;
CURSOR my_cursor IS SELECT * FROM table1;
BEGIN
OPEN my_cursor;
LOOP
FETCH my_cursor INTO my_record;
EXIT WHEN my_cursor%NOTFOUND;
is_open_attr := my_cursor%ISOPEN;
found_attr := my_cursor%FOUND;
END LOOP;
CLOSE my_cursor;
END;
Código de saída:¶
--** 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":1, "minor":0},{"attributes":{"component":"oracle"}}'
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();
my_cursor CURSOR
FOR
SELECT
OBJECT_CONSTRUCT( *) sc_cursor_record FROM
table1;
BEGIN
OPEN my_cursor;
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*/ /*** SSC-FDM-OR0038 - BOOLEAN CURSOR ATTRIBUTE %ISOPEN IS NOT SUPPORTED IN SNOWFLAKE ***/;
found_attr := my_record IS NOT NULL;
END LOOP;
CLOSE my_cursor;
END;
$$;
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0039¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0007.
Descrição¶
Essa mensagem aparece quando você tenta usar um comando Create Type que não é compatível com o Snowflake.
Exemplo de código¶
Código de entrada (Oracle):¶
CREATE TYPE type6 UNDER type5(COL1 INTEGER);
Código de saída:¶
----** SSC-FDM-OR0039 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE **
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
;
Recomendações¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0040¶
Descrição¶
O Snowflake não permite a modificação de valores numéricos. No Snowflake, os decimais são sempre representados usando um ponto (.) como separador decimal. A declaração da sessão ALTER foi comentada e uma mensagem de aviso foi adicionada.
Exemplo de código¶
Oracle:¶
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';
Script Snowflake¶
----** SSC-FDM-OR0040 - NUMERIC CHARACTERS CANNOT BE ALTERED IN SNOWFLAKE. THE DECIMAL SEPARATOR IN SNOWFLAKE IS THE DOT CHARACTER. **
--ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.'
;
Recomendações¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0041¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-OR0076
Descrição¶
A conversão de pacotes incorporada não está disponível no momento.
Exemplo de código¶
Código de entrada (Oracle):¶
SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
Código de saída:¶
SELECT
--** SSC-FDM-OR0041 - TRANSLATION FOR BUILT-IN PACKAGE 'UTL_RAW.CAST_TO_RAW' IS NOT CURRENTLY SUPPORTED. **
'' AS CAST_TO_RAW,
--** SSC-FDM-OR0041 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_UTILITY.GET_TIME' IS NOT CURRENTLY SUPPORTED. **
'' AS GET_TIME
FROM DUAL;
Recomendações¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0042¶
Descrição¶
O tipo de dados Date é convertido em Date ou Timestamp no Snowflake. Essa conversão depende do sinalizador –disableDateAsTimestamp, pois o tipo Date do Snowflake se comporta de forma diferente do tipo Date do Oracle.
Principais diferenças¶
Oráculo DATE |
Snowflake DATE |
|
---|---|---|
Funcionalidade |
Armazena informações de data e hora |
Armazena apenas informações de data (ano, mês, dia) |
Armazenamento interno |
Número binário que representa os segundos desde a época |
Formato compacto otimizado para datas |
Casos de uso |
Armazenamento de data e hora para fins gerais |
Cenários em que apenas informações de data são necessárias |
Vantagens |
Suporta data e hora |
Armazenamento mais eficiente para datas |
Limitações |
Não é possível armazenar componentes de data e hora separadamente. |
Não armazena informações de tempo |
Exemplo de código¶
Código de entrada (Oracle):¶
CREATE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" DATE,
"UPDATED_DATE" DATE
);
Código de saída:¶
CREATE OR REPLACE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
"UPDATED_DATE" TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
-- Additional Params: --disableDateAsTimestamp
CREATE OR REPLACE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" DATE /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
"UPDATED_DATE" DATE /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Recomendações¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0043¶
Descrição¶
Esse erro ocorre ao converter uma função TO_CLOB para TO_VARCHAR. Ao trabalhar com os parâmetros BFILE ou BLOB, talvez seja necessário especificar um parâmetro de formato para a conversão adequada.
Exemplo de código¶
Código de entrada:¶
SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
Código de saída:¶
SELECT
--** SSC-FDM-OR0043 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED. **
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
Recomendações¶
Verifique se os resultados de saída coincidem entre o código original e o código convertido. Adicione um parâmetro de formato, se necessário, para garantir a compatibilidade.
Para obter assistência adicional, entre em contato com nossa equipe de suporte pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0044¶
Nota
Para maior clareza, simplificamos o código omitindo algumas partes.
Descrição¶
Esse aviso aparece ao usar a função REGEXP_LIKE
do Oracle com um parâmetro de correspondência (terceiro parâmetro). O aviso indica que a função REGEXP_LIKE_UDF
no Snowflake, que substitui o REGEXP_LIKE
do Oracle, pode não ser compatível com todos os caracteres de parâmetro de correspondência. Como resultado, o resultado da consulta no Snowflake pode ser diferente do Oracle.
Exemplo de código¶
Código de entrada Oracle:¶
SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')
ORDER BY last_name;
Código de saída:¶
SELECT last_name
FROM
hr.employees
WHERE
--** SSC-FDM-OR0044 - 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;
Se a sua condição
REGEXP_LIKE
contiver caracteres não suportados na função definida pelo usuário, considere modificar a expressão regular para obter o mesmo comportamento de correspondência sem usar esses caracteres. Para obter uma lista completa dos caracteres não suportados, consulte a documentação REGEXP_LIKE_UDF.Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0047¶
Descrição¶
O parâmetro de sessão TIMESTAMP_OUTPUT_FORMAT deve ser definido como “DD-MON-YY HH24.MI.SS.FF AM TZH:TZM” para garantir que os carimbos de data/hora sejam exibidos no formato correto e correspondam à saída esperada.
Exemplo de código¶
Código de entrada:¶
SELECT SYSTIMESTAMP FROM DUAL;
Exemplo do formato TIMESTAMP padrão do Oracle¶
13-JAN-21 04:18:37.288656 PM UTC
Código de saída:¶
SELECT
CURRENT_TIMESTAMP() /*** SSC-FDM-OR0047 - YOU MAY NEED TO SET TIMESTAMP OUTPUT FORMAT ('DD-MON-YY HH24.MI.SS.FF AM TZH:TZM') ***/
FROM DUAL;
Como o Snowflake exibe TIMESTAMPS por padrão¶
2021-01-13 08:18:19.720 -080
Recommendations
Para modificar a forma como os carimbos de data/hora são exibidos no Snowflake, execute esta consulta:
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'DD-MON-YY HH24.MI.SS.FF AM TZH:TZM';
Para obter assistência adicional, entre em contato com nossa equipe de suporte pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0045
Nota
Este FDM foi descontinuado. Para obter mais informações, consulte a documentação de SSC-EWI-OR0010.
Descrição¶
Esse aviso aparece quando as cláusulas PARTITION
e SUBPARTITION
são usadas em uma consulta. O Snowflake gerencia o particionamento de dados automaticamente, portanto, essas cláusulas não são necessárias.
Exemplo de código¶
Código de entrada:¶
SELECT * FROM TABLITA PARTITION(col1);
Código de saída:¶
SELECT * FROM
TABLITA
-- --** SSC-FDM-OR0045 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE **
-- PARTITION(col1)
;
Recomendações¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-OR0046¶
Nota
Para facilitar a leitura, simplificamos algumas seções do código neste exemplo.
Descrição¶
Esse aviso ocorre quando uma restrição de subconsulta é encontrada em um comando SELECT
.
Exemplo de código¶
Código de entrada:¶
SELECT * FROM LATERAL(SELECT * FROM TABLITA WITH READ ONLY CONSTRAINT T);
Código de saída:¶
SELECT * FROM LATERAL(SELECT * FROM
TABLITA
-- --** SSC-FDM-OR0046 - THE SUBQUERY RESTRICTION IS NOT POSSIBLE IN SNOWFLAKE **
-- WITH READ ONLY CONSTRAINT T
);
Recomendações¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com