SnowConvert AI - Oracle - PL/SQL para Script Snowflake¶
ASSIGNMENT STATEMENT¶
Descrição¶
A instrução de atribuição define o valor de um item de dados como um valor válido.\ (Instrução ASSIGNMENT da referência de linguagem Oracle PL/SQL)
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Sintaxe da atribuição Oracle¶
Sintaxe da atribuição do Script Snowflake¶
Nota
LET não é necessária para instruções de atribuição quando a variável tiver sido declarada anteriormente. Consulte a documentação do Snowflake Assignment para obter mais informações.
Amostra de padrões da origem¶
1. Scalar Variables¶
Oracle¶
Resultado¶
COL1 |
COL2 |
COL3 |
COL4 |
|---|---|---|---|
1 |
4.2 |
Hello World |
1 |
Script Snowflake¶
Resultado¶
COL1 |
COL2 |
COL3 |
COL4 |
|---|---|---|---|
1.000000000000000000 |
4.000000000000000000 |
Hello World |
1 |
Aviso
A transformação de alguns tipos de dados precisa ser atualizada, o que pode causar resultados diferentes. Por exemplo, NUMBER para NUMBER arredonda o valor e o ponto decimal é perdido. Já existe um item de trabalho para essa questão.
2. Out Parameter Assignment¶
Para obter mais informações sobre como os parâmetros de saída estão sendo convertidos, consulte o seguinte artigo Parâmetros de saída.
3. Not Supported Assignments¶
Oracle¶
Script Snowflake¶
Problemas conhecidos¶
1. Several Unsupported Assignment Statements¶
Atualmente, a transformação de variáveis de cursor, coleção, registro e tipo definido pelo usuário não é suportada pelo Snow Scripting. Portanto, as instruções de atribuição que usam essas variáveis são comentadas e marcadas como não suportadas. Alterar essas variáveis para tipos de dados semiestruturados do Snowflake pode ajudar como solução alternativa em alguns cenários.
CALL¶
Descrição¶
Há dois tipos de instruções de chamada no Oracle:
1-Instrução CALL:¶
Use a instrução
CALLpara executar uma rotina (um procedimento ou função autônoma, ou um procedimento ou função definido em um tipo ou pacote) em SQL. (CALL da referência de linguagem Oracle SQL)
Especificação de 2 chamadas:¶
Uma especificação de chamada declara um método Java ou um subprograma de linguagem C para que possa ser chamado a partir de PL/SQL. (Especificação de chamada da referência de linguagem Oracle SQL)
The CALL Specification is not supported in Snowflake Scripting since this is part of the development libraries for C and JAVA, not a SQL statement, therefore this statement is not transformed.
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.
CASE¶
Referência de tradução para instruções CASE
Descrição¶
A instrução
CASEseleciona uma sequência de condições e executa a instrução correspondente. Para obter mais informações sobre Oracle CASE, veja aqui.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Caso simples¶
Sintaxe Oracle CASE¶
Sintaxe Script Snowflake CASE¶
Caso pesquisado¶
Sintaxe Oracle CASE¶
Sintaxe Script Snowflake CASE¶
Amostra de padrões da origem¶
Sample auxiliary table¶
Oracle¶
Snowflake¶
Caso simples¶
Oracle¶
Resultado¶
COL |
|---|
Ruim |
Esta nota não está presente |
Excelente |
Script Snowflake¶
Resultado¶
COL |
|---|
Ruim |
Esta nota não está presente |
Excelente |
Caso pesquisado¶
Oracle¶
Resultado¶
COL |
|---|
Ruim |
Esta nota não está presente |
Excelente |
Script Snowflake¶
Resultado¶
COL |
|---|
Ruim |
Esta nota não está presente |
Excelente |
Problemas conhecidos¶
1. Labels are not supported in Snowflake Scripting CASE syntax¶
Os rótulos são comentados ou removidos, dependendo de sua posição.
EWIs relacionados¶
SSC-EWI-0094: Declaração de rótulo incompatível.
SSC-FDM-0007: Elemento com dependências ausentes.
COMPOUND STATEMENTS¶
Esta seção é uma especificação de tradução para as instruções compostas
Aviso
Esta seção é um trabalho em andamento, as informações podem mudar no futuro.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição geral¶
A unidade básica de um programa de código-fonte PL/SQL é o bloco, que agrupa instruções e declarações relacionadas.
Um bloco PL/SQL é definido pelas palavras-chave DECLARE, BEGIN, EXCEPTION e END. Essas palavras-chave dividem o bloco em uma parte declarativa, uma parte executável e uma parte de tratamento de exceções. Somente a parte executável é necessária. (Blocos anônimos PL/SQL)
O bloco BEGIN...END no Oracle pode ter as seguintes características:
É aninhado.
Contém a instrução DECLARE para variáveis.
Agrupa várias instruções SQL ou PL/SQL.
Sintaxe do Oracle¶
Sintaxe do Snowflake¶
Nota
No Snowflake, um bloco BEGIN/END pode ser a construção de nível superior dentro de um bloco anônimo (documentação do Snowflake).
Amostra de padrões da origem¶
1. IF-ELSE block¶
Revise a seguinte documentação sobre instruções IF para saber mais: tradução de instruções SnowConvert AI IF e documentação de instrução Snowflake IF
Oracle¶
Resultado¶
Snowflake¶
Aviso
Ao chamar um procedimento ou função definida pelo usuário (UDF), é necessário gerar código para suportar a equivalência como a variável call_results. Nesse caso, é usado para imprimir as informações.
Revisão da função definida pelo usuário (UDF) usada aqui.
Resultado¶
2. CASE statement¶
Para obter mais informações, consulte a seguinte documentação: Documentação da instrução SnowConvert AI CASE e Documentação do Snowflake CASE
Oracle¶
Resultado¶
Snowflake¶
Aviso
Ao chamar um procedimento ou função definida pelo usuário (UDF), é necessário gerar código para suportar a equivalência como a variável call_results. Nesse caso, é usado para imprimir as informações.
Revisão da função definida pelo usuário (UDF) usada aqui.
Resultado¶
3. LOOP statements¶
Para obter mais informações, consulte a seguinte documentação: SnowConvert AI FOR LOOP e Snowflake Documentação LOOP e Documentação FOR.
Oracle¶
Resultado¶
Snowflake¶
Primeira guia¶
Resultado¶
4. Procedure call and OUTPUT parameters¶
Bloco anônimo no Oracle pode ter chamadas para procedimentos. Além disso, a seguinte documentação pode ser útil: Documentação de procedimento SnowConvert AI.
O exemplo a seguir usa os parâmetros OUT; as informações sobre a transformação atual podem ser encontradas aqui: Parâmetros SnowConvert AI OUTPUT
Oracle¶
Resultado¶
Snowflake¶
Resultado¶
5. Alter session¶
Para obter mais informações, consulte a seguinte documentação: Documentação da sessão de alteração.
Observe que, no Oracle, o bloco BEGIN...END deve usar a instrução EXECUTE IMMEDIATE para executar as instruções alter session.
Oracle¶
Resultado¶
Snowflake¶
Resultado¶
6. Cursors¶
O exemplo a seguir mostra o uso de um cursor dentro de um bloco BEGIN…END. Revise a documentação a seguir para saber mais: Documentação do cursor.
Oracle¶
Resultado¶
Snowflake¶
Aviso
Ao chamar um procedimento ou função definida pelo usuário (UDF), é necessário gerar código para suportar a equivalência como a variável call_results. Nesse caso, é usado para imprimir as informações.
Revisão da função definida pelo usuário (UDF) usada aqui.
Resultado¶
7. Select statements¶
Para obter mais informações, revise a documentação a seguir: Selecione a documentação.
Oracle¶
Resultado¶
Snowflake¶
Aviso
Ao chamar um procedimento ou função definida pelo usuário (UDF), é necessário gerar código para suportar a equivalência como a variável call_results. Nesse caso, é usado para imprimir as informações.
Revisão da função definida pelo usuário (UDF) usada aqui.
Resultado¶
8. Join Statements¶
Para obter mais informações, revise a documentação a seguir: Documentação das junções.
Oracle¶
Resultado¶
Snowflake¶
Aviso
Ao chamar um procedimento ou função definida pelo usuário (UDF), é necessário gerar código para suportar a equivalência como a variável call_results. Nesse caso, é usado para imprimir as informações.
Revisão da função definida pelo usuário (UDF) usada aqui.
9. Exception handling¶
Oracle¶
Resultado¶
Snowflake¶
Aviso
ZERO_DIVIDE no Snowflake não é suportado.
Resultado¶
Problemas conhecidos¶
Instruções GOTO sem suporte no Oracle.
As exceções que usam instruções GOTO também podem ser afetadas.
A funcionalidade do cursor pode ser adaptada de acordo com as restrições atuais de conversão.
EWIs relacionados¶
[SSC-EWI-0027](../../../general/documentação técnica/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-evi-0027): a instrução a seguir usa uma variável/literal com uma consulta inválida e não será executada.
SSC-EWI-OR0036: Problemas de resolução de tipos; a operação aritmética pode não se comportar corretamente entre a cadeia de caracteres e a data.
SSC-FDM-OR0035: DBMS_OUTPUT. Implementação UDF de verificação PUTLINE.
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-PRF-0004: Esta instrução tem usos do cursor para o loop.
SSC-EWI-0030: A instrução abaixo tem usos de Dynamic SQL
CONTINUE¶
Referência de tradução para converter instrução do Oracle CONTINUE para Script Snowflake
Descrição¶
A instrução
CONTINUEsai da atual iteração de um loop, seja de forma condicional ou incondicional, e transfere o controle para a próxima iteração do loop atual ou um loop rotulado delimitador.\ (Instrução CONTINUE da referência de linguagem Oracle PL/SQL)
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Sintaxe Oracle CONTINUE¶
Sintaxe Script Snowflake CONTINUE¶
Amostra de padrões da origem¶
1. Simple Continue¶
O código ignora a instrução INSERT usando CONTINUE.
Observação
Esse caso é funcionalmente equivalente.
Oracle¶
Resultado¶
ITERATOR |
|---|
Script Snowflake¶
Resultado¶
ITERATOR |
|---|
2. Continue with condition¶
O código ignora a inserção de números pares usando CONTINUE.
Nota
Esse caso não é funcionalmente equivalente, mas você pode transformar a condição em uma instrução IF.
Oracle¶
Resultado¶
ITERATOR |
|---|
1 |
3 |
5 |
7 |
9 |
11 |
13 |
15 |
17 |
19 |
21 |
Script Snowflake¶
Resultado¶
ITERATOR |
|---|
1 |
3 |
5 |
7 |
9 |
11 |
13 |
15 |
17 |
19 |
21 |
3. Continue with label and condition¶
O código pula a linha 19 e o loop interno é executado apenas uma vez porque CONTINUE está sempre pulando para o loop externo usando o rótulo.
Observação
Esse caso é funcionalmente equivalente à aplicação do mesmo processo da amostra anterior.
Nota
Observe que os rótulos serão comentados.
Oracle¶
Resultado¶
ITERATOR |
|---|
I1 |
K1 |
K2 |
K3 |
K4 |
K5 |
I2 |
I3 |
I4 |
I5 |
I6 |
I7 |
I8 |
I9 |
I10 |
I11 |
Script Snowflake¶
Resultado¶
ITERATOR |
|---|
I1 |
K1 |
K2 |
K3 |
K4 |
K5 |
I2 |
I3 |
I4 |
I5 |
I6 |
I7 |
I8 |
I9 |
I10 |
I11 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-EWI-0094: Declaração de rótulo incompatível.
DECLARE¶
Referência de tradução para converter instrução do Oracle DECLARE para Script Snowflake
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
A instrução Oracle DECLARE é uma parte opcional da instrução de bloco PL/SQL. Ele permite a criação de variáveis, constantes, instruções e definições de procedimentos, instruções e definições de funções, exceções, cursores, tipos e muitas outras instruções. Para obter mais informações sobre Oracle DECLARE, veja aqui.
Sintaxe Oracle DECLARE¶
Sintaxe Script Snowflake DECLARE¶
Amostra de padrões da origem¶
Declaração de variáveis¶
Sintaxe da declaração de variável Oracle¶
Sintaxe da declaração de variável do Script Snowflake¶
Oracle¶
Script Snowflake¶
Declaração de constante¶
Aviso
As constantes não são compatíveis com o Snowflake Scripting; no entanto, elas estão sendo transformadas em variáveis para simular o comportamento.
Sintaxe da declaração de constante Oracle¶
Sintaxe da declaração de variável do Script Snowflake¶
Oracle¶
Script Snowflake¶
Declaração de cursor¶
Sintaxe da declaração do cursor Oracle¶
Sintaxe da declaração do cursor do Script Snowflake¶
Perigo
A _ declaração de cursor _ do Oracle não é necessária, portanto, pode ser comentada no código de saída. A _ definição do cursor _ será usada em seu lugar e será convertida para a _ declaração de cursor _ do Snowflake Scripting. Consulte a seção CURSOR para obter mais informações sobre a definição de cursor.
Declaração de exceção¶
A declaração de exceção às vezes pode ser seguida pela inicialização da exceção; a transformação atual pega ambas e as mescla na declaração de exceção do Snowflake Scripting. O PRAGMA EXCEPTION_INIT original será comentado.
Sintaxe da declaração de exceção Oracle¶
Sintaxe da declaração de exceção do Script Snowflake¶
Oracle¶
Script Snowflake¶
Casos não suportados¶
As seguintes instruções de declaração do Oracle não são compatíveis com o bloco de declaração do Snowflake Scripting:
Declaração de variável de cursor.
Declaração de variável de coleção.
Declaração de variável de registro.
Definição de tipo (todas as suas variantes).
Declaração e definição de funções.
Declaração e definição de procedimentos.
Problemas conhecidos¶
1. The variable declarations with NOT NULL constraints are not supported by Snow Scripting.¶
A criação de variáveis com a restrição NOT NULL gera um erro no Snow Scripting.
2. The cursor declaration has no equivalent to Snowflake Scripting.¶
A declaração de cursor Oracle é inútil, portanto, pode ser comentada no código de saída. Em vez disso, será usada a definição do cursor, que será convertida para a declaração de cursor do Snowflake Scripting.
3. The exception code exceeds Snowflake Scripting limits.¶
O código de exceção do Oracle está sendo removido quando excede os limites de código do Snowflake Scripting. O código de exceção deve ser um número inteiro entre -20000 e -20999.
3. The not supported cases.¶
Há algumas instruções de declaração do Oracle que não são compatíveis com o bloco de declaração do Snowflake Scripting, portanto, elas podem ser comentadas e um aviso será adicionado.
EWIs relacionados¶
SSC-EWI-OR0051: PRAGMA EXCEPTION_INIT não é compatível.
SSC-EWI-OR0099: O código de exceção excede o limite do Script Snowflake.
SSC-FDM-0016: Constantes não são compatíveis com o Script Snowflake. Ela foi transformada em uma variável.
SSC-FDM-OR0025: A restrição Not Null é incompatível com os procedimentos do Snowflake.
DEFAULT PARAMETERS¶
Este artigo é sobre a transformação atual dos parâmetros padrão e como sua funcionalidade está sendo emulada.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Um parâmetro padrão é um parâmetro que tem um valor caso um argumento não seja passado no procedimento ou na chamada de função. Como o Snowflake não é compatível com os parâmetros padrão, o SnowConvert AI insere o valor padrão no procedimento ou na chamada de função.
Na declaração, a cláusula DEFAULT VALUE do parâmetro é removida. Ambas as sintaxes, o símbolo := e a cláusula DEFAULT, são compatíveis.
Amostra de padrões da origem¶
Sample auxiliaryy code¶
Oracle¶
Snowflake¶
Declaração de parâmetro padrão¶
Oracle¶
Script Snowflake¶
Chamada de procedimentos com parâmetros padrão¶
Oracle¶
Script Snowflake¶
Para verificar se a funcionalidade está sendo emulada corretamente, a consulta a seguir executará o procedimento e um SELECT da tabela mencionada anteriormente.
Oracle¶
Resultado¶
COL1 |
COL2 |
|---|---|
10 |
15 |
10 |
1 |
10 |
15 |
10 |
2 |
1 |
2 |
Script Snowflake¶
Resultado¶
COL1 |
COL2 |
|---|---|
10 |
15 |
10 |
1 |
10 |
15 |
10 |
2 |
1 |
2 |
Chamada de procedimentos com argumentos nomeados e parâmetros padrão¶
Oracle¶
Script Snowflake¶
Para verificar se a funcionalidade está sendo emulada corretamente, a consulta a seguir executará o procedimento e um SELECT da tabela mencionada anteriormente.
Oracle¶
Resultado¶
COL1 |
COL2 |
COL3 |
|---|---|---|
10 |
20 |
30 |
10 |
20 |
30 |
20 |
30 |
10 |
100 |
30 |
10 |
100 |
10 |
30 |
100 |
10 |
1000 |
Script Snowflake¶
Resultado¶
COL1 |
COL2 |
COL3 |
|---|---|---|
10 |
20 |
30 |
10 |
20 |
30 |
20 |
30 |
10 |
100 |
30 |
10 |
100 |
10 |
30 |
100 |
10 |
1000 |
Problemas conhecidos¶
1. Não foram encontrados problemas
EWIs relacionados¶
Sem EWIs relacionados.
EXECUTE IMMEDIATE¶
Referência de tradução para converter instrução Oracle EXECUTE IMMEDIATE em Script Snowflake
Descrição¶
A instrução
EXECUTEIMMEDIATEcria e executa uma instrução dinâmica SQL em uma única operação.O SQL dinâmico nativo usa a instrução
EXECUTEIMMEDIATEpara processar a maioria das instruções SQL dinâmicas. (Instrução EXECUTE IMMEDIATE da referência de linguagem Oracle PL/SQL)
Sintaxe Oracle EXECUTE IMMEDIATE¶
O Snowflake Scripting tem suporte para essa instrução, embora com algumas diferenças funcionais. Para obter mais informações sobre a contraparte do Snowflake, visite a documentação do Snowflake EXECUTE IMMEDIATE.
Sintaxe Script Snow EXECUTE IMMEDIATE¶
Amostra de padrões da origem¶
Os próximos exemplos criarão uma tabela e tentarão eliminar a tabela usando Execute Immediate.
Usando uma cadeia de caracteres codificada¶
Oracle¶
Script Snowflake¶
Armazenando a cadeia de caracteres em uma variável¶
Oracle¶
Script Snowflake¶
Concatenação de parâmetros em instruções dinâmicas¶
Oracle¶
Script Snowflake¶
Transformação de cláusula USING¶
Oracle¶
Resultados¶
COL1 |
|---|
1 |
Script Snowflake¶
Nota
Observe que são necessários parênteses para os parâmetros da cláusula USING no Snowflake Scripting.
Resultados¶
COL1 |
|---|
1 |
Problemas conhecidos¶
1. Immediate Execution results cannot be stored in variables.¶
O SnowScripting não é compatível com as cláusulas INTO nem BULK COLLECT INTO. Por esse motivo, os resultados precisarão ser transmitidos por outros meios.
2. Numeric Placeholders¶
Os nomes numéricos dos espaços reservados não estão sendo reconhecidos pelo SnowConvert AI, mas há um item de trabalho para corrigir esse problema.
3. Argument Expressions are not supported by Snowflake Scripting¶
No Oracle, é possível usar expressões como argumentos para a cláusula Using; no entanto, isso não é suportado pelo Snowflake Scripting, e elas são comentadas.
4. Dynamic SQL Execution queries may be marked incorrectly as non-runnable.¶
Em alguns cenários, uma instrução de execução pode ser comentada independentemente de ser segura ou não para ser executada, portanto, leve isso em consideração:
Oracle¶
Script Snowflake¶
Nota
Observe que são necessários parênteses para os parâmetros da cláusula USING no Snowflake Scripting.
EWIs relacionados¶
SSC-EWI-0027: Variável com consulta inválida.
SSC-EWI-0030: A instrução abaixo tem usos de Dynamic SQL.
EXIT¶
Referência de tradução para converter instrução do Oracle EXIT para Script Snowflake
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
A instrução
EXITsai da atual iteração de um loop, seja de forma condicional ou incondicional, e transfere o controle para o fim do loop atual ou de um loop rotulado delimitador.\ (Instrução EXIT da referência de linguagem Oracle PL/SQL)
Sintaxe Oracle EXIT¶
Sintaxe Script Snowflake EXIT¶
Amostra de padrões da origem¶
Nota
Observe que você pode alterar EXITcom BREAKe tudo funcionará da mesma forma.
1. Simple Exit¶
O código ignora a instrução INSERT usando EXIT.
Observação
Esse caso é funcionalmente equivalente.
Oracle¶
Resultado¶
ITERATOR |
|---|
Script Snowflake¶
Resultado¶
ITERATOR |
|---|
2. Exit with condition¶
O código sai do loop quando o iterador é maior que 5.
Observação
Esse caso é funcionalmente equivalente a transformar a condição em uma instrução IF.
Oracle¶
Resultado¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
Script Snowflake¶
Resultado¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
3. Exit with label and condition¶
O código interrompe os dois loops usando a instrução EXIT que aponta para o loop externo.
Observação
Esse caso é funcionalmente equivalente à aplicação do mesmo processo da amostra anterior.
Nota
Observe que os rótulos serão comentados.
Oracle¶
Resultado¶
ITERATOR |
|---|
I1 |
K1 |
K2 |
K3 |
K4 |
K5 |
Script Snowflake¶
Resultado¶
ITERATOR |
|---|
I1 |
K1 |
K2 |
K3 |
K4 |
K5 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-EWI-0094: Declaração de rótulo incompatível.
EXPRESSIONS¶
Referência de tradução de expressões Oracle para Script Snow
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
A tabela a seguir apresenta um resumo de como transformar os diferentes tipos de Expressão Oracle no Snow Scripting.
Sintaxe |
Status da conversão |
Notas |
|---|---|---|
Parcial |
||
Parcial |
||
Parcial |
||
Parcial |
||
Completo |
N/A |
|
Completo |
N/A |
|
Não traduzido |
O Snowflake não tem um equivalente nativo para as coleções Oracle. Consulte Coleções e registros. |
|
Não traduzido |
O Snowflake não tem um equivalente nativo para os tipos de registros do Oracle. Consulte Coleções e registros. |
Cenários comuns parcialmente suportados¶
Constantes Oracle¶
Oracle¶
Resultado¶
COL |
|---|
CONSTANT TEXT |
Snowflake¶
Resultado¶
COL |
|---|
CONSTANT TEXT |
Expressões numéricas não suportadas¶
Oracle¶
Resultado¶
COL |
|---|
4 |
104 |
11 |
3 |
Expressões boolianas não suportadas¶
Oracle¶
EWIs Relacionados.¶
SSC-FDM-0016: Constantes não são compatíveis com o Script Snowflake. O valor foi transformado em uma variável.
FOR LOOP¶
Descrição¶
A cada iteração da instrução
FORLOOP, suas instruções são executadas, seu índice é incrementado ou decrementado e o controle retorna ao topo do loop. (Instrução FOR LOOP da referência de linguagem Oracle PL/SQL).
Sintaxe do Oracle¶
Sintaxe do Script Snowflake¶
O Snowflake Scripting oferece suporte a FOR LOOP que faz um loop de um número especificado de vezes. Os limites superior e inferior devem ser INTEGER. Confira mais informações na documentação do Snowflake Scripting.
O comportamento do Oracle FOR LOOP também pode ser modificado com o uso das instruções:
Amostra de padrões da origem¶
1. FOR LOOP¶
Observação
Esse caso é funcionalmente equivalente.
Exemplo de Oracle FOR LOOP¶
Exemplo de Script Snowflake FOR LOOP¶
2. FOR LOOP with additional clauses¶
Exemplo de Oracle FOR LOOP¶
Exemplo de Script Snowflake FOR LOOP¶
3. FOR LOOP with multiple conditions¶
Exemplo de Oracle FOR LOOP¶
Exemplo de Script Snowflake FOR LOOP¶
4. FOR LOOP with unsupported format¶
Exemplo de Oracle FOR LOOP¶
Exemplo de Script Snowflake FOR LOOP¶
Aviso
No momento, a transformação de tipos personalizados não é compatível com o Snowflake Scripting.
Problemas conhecidos¶
1. For With Multiple Conditions¶
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. Somente a primeira condição é migrada e as outras são ignoradas durante a transformação. Consulte SSC-FDM-OR0022.
Oracle¶
Exemplo de Script Snowflake FOR LOOP¶
2. Variável de contador mutável vs. variável de contador imutável
O Oracle permite modificar o valor da variável FOR LOOP dentro do loop. A documentação atual inclui essa funcionalidade, mas a Snowflake recomenda evitar isso. A modificação do valor dessa variável pode não se comportar corretamente no Snowflake Scripting.
3. Número inteiro vs. número flutuante para limite superior ou inferior
O Script Snowflake permite apenas que um INTEGER ou uma expressão que avalia como um INTEGER como um limite para a condição FOR LOOP. Os números flutuantes serão arredondados para cima ou para baixo e alterarão o limite original.
4. Cláusulas Oracle não suportadas
O Oracle permite cláusulas adicionais à condição FOR LOOP. Como a cláusula BY para um incremento escalonado na condição. E a cláusula WHILE e WHEN para expressões booleanas. Estas cláusulas adicionais não são compatíveis no Script Snowflake e são ignoradas durante a transformação. Verifique SSC-EWI-OR0101.
Oracle¶
Script Snowflake¶
5. Formatos não suportados
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 Script Snowflake só é compatível com FOR LOOP com números inteiros definidos como limites. Todos os outros formatos são marcados como incompatíveis e exigem esforço manual adicional para serem transformados. Verifique SSC-EWI-OR0103.
EWIs relacionados¶
SSC-EWI-0058: A funcionalidade é atualmente incompatível com o Script Snowflake.
SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.
SSC-EWI-OR0100: Para o loop com várias condições, não é atualmente compatível com o Script Snowflake. Somente a primeira condição é usada.
SSC-EWI-OR0101: Específico para a cláusula de loop, não é atualmente compatível com o Script Snowflake.
SSC-EWI-OR0103: Para o formato de loop, não é atualmente compatível com o Script Snowflake.
FORALL¶
Descrição¶
A instrução
FORALLexecuta uma instrução DML várias vezes, com valores diferentes nas cláusulasVALUESeWHERE. (Instrução FORALL da referência de linguagem Oracle PL/SQL).
Sintaxe do Oracle¶
Aviso
O Snowflake Scripting não tem equivalência direta com a instrução FORALL, mas pode ser emulado com diferentes soluções alternativas para obter equivalência funcional.
Amostra de padrões da origem¶
Dados de configuração¶
Oracle¶
Tabelas 1¶
Tabelas 2¶
Snowflake¶
Tabelas 1¶
Tabelas 2¶
1. FORALL With Collection of Records¶
Oracle¶
Observação
Os três casos abaixo têm a mesma transformação para o Snowflake Scripting e são funcionalmente equivalentes.
Fonte¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|
Snowflake¶
FORALL com coleção de registros¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
Nota
As instruções EWIs SSC-PRF-0001 e SSC-PRF-0003 são adicionadas em cada ocorrência de FETCH BULK COLLECT na instrução FORALL.
2. FORALL With INSERT INTO¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
3. FORALL With Multiple Fetched Collections¶
Oracle¶
Com INSERT INTO¶
Com UPDATE¶
Resultados INSERT INTO¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
1 |
2 |
Resultados UPDATE¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2. |
Snowflake¶
Com INSERT INTO¶
Com UPDATE¶
Resultados INSERT INTO¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
Resultados UPDATE¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
4. FORALL With Record of Collections¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a script FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
5. FORALL With Dynamic SQL¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
6. FORALL With Literal SQL¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
7. FORALL With Parametrized Cursors¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
8. FORALL Without LOOPS¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
9. FORALL With UPDATE Statements¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
10. FORALL With DELETE Statements¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
Snowflake¶
Equivalente a FORALL¶
Resultados¶
11. FORALL With PACKAGE References¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
10 |
10 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
10.000000000000000000 |
10.000000000000000000 |
Aviso
A transformação acima só funciona se a variável definida no pacote for um registro de coleções.
12. FORALL With MERGE Statements¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
4 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
1.000000000000000000 |
4.000000000000000000 |
Aviso
A transformação acima só funciona se a instrução SELECT dentro de MERGE estiver selecionando da tabela DUAL.
13. Default FORALL transformation¶
Nota
Você também pode estar interessado em auxiliares de cursor em massa.
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
Nota
Essa transformação é feita somente quando nenhuma das transformações mencionadas anteriormente pode ser feita.
14. Multiple FORALL inside a LOOP clause¶
Nota
Esse padrão se aplica quando há mais de um FORALL no mesmo procedimento e ele atende à seguinte estrutura.
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
54321 |
2 |
54321 |
3 |
54321 |
4 |
54321 |
5 |
54321 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
54321 |
2 |
54321 |
3 |
54321 |
4 |
54321 |
5 |
54321 |
6 |
15. Multiple FORALL inside different LOOP clauses¶
Nota
Esse padrão se aplica quando há mais de um FORALL no mesmo procedimento e ele atende à seguinte estrutura.
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
54321 |
2 |
54321 |
3 |
54321 |
4 |
54321 |
5 |
54321 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
54321 |
2 |
54321 |
3 |
54321 |
4 |
54321 |
5 |
54321 |
6 |
16. FORALL with MERGE INTO with LOG ERRORS¶
Aviso
Esse padrão ainda não foi implementado
Oracle¶
LOG ERRORS¶
Snowflake¶
LOG ERRORS¶
17. FORALL with INSERT with LOG ERRORS¶
Aviso
Esse padrão ainda não foi implementado
Oracle¶
LOG ERRORS¶
Snowflake¶
LOG ERRORS¶
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-EWI-0030: A instrução abaixo tem usos de Dynamic SQL.
SSC-EWI-0036: Tipo de dados convertido em outro tipo de dados.
SSC-EWI-0056: Criar tipo não suportado.
SSC-EWI-0058: A funcionalidade é atualmente incompatível com o Script Snowflake.
SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.
SSC-EWI-OR0049: Ainda não há compatibilidade com constantes de pacote no pacote com estado.
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-FDM-0015: Tipo personalizado referenciado na consulta não encontrado.
SSC-PRF-0001: Esta instrução tem usos de operações de busca de cursor em massa.
SSC-PRF-0003: Buscar dentro de um loop é considerado um padrão complexo, o que poderia degradar o desempenho do Snowflake.
IF¶
Descrição¶
A instrução IF executa ou ignora uma sequência de uma ou mais instruções, dependendo do valor de uma expressão BOOLEAN. Para obter mais informações sobre Oracle IF, veja aqui.
Amostra de padrões da origem¶
Sample auxiliary table¶
Possíveis variações de IF¶
Oracle¶
Código 1¶
Código 2¶
Código 3¶
Código 4¶
Resultado 1¶
COL1 |
|---|
um |
Resultado 2¶
COL1 |
|---|
Entrada inesperada. |
Resultado 3¶
COL1 |
|---|
três |
Resultado 4¶
COL1 |
|---|
Entrada inesperada. |
Script Snowflake¶
Código 1¶
Código 2¶
Código 3¶
Código 4¶
Resultado 1¶
COL1 |
|---|
um |
Resultado 2¶
COL1 |
|---|
Entrada inesperada. |
Resultado 3¶
COL1 |
|---|
três |
Resultado 4¶
COL1 |
|---|
Entrada inesperada. |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.
IS EMPTY¶
Esta é uma referência de tradução para converter a instrução Oracle IS EMPTY em Snowflake
Aviso
Esta seção é um trabalho em andamento; as informações podem mudar no futuro.
Descrição¶
Use as condições IS [NOT] EMPTY para testar se uma tabela aninhada especificada está vazia, independentemente de qualquer elemento da coleção ser NULL. (Documentação).
Sintaxe do Oracle¶
Amostra de padrões da origem¶
Oracle¶
O exemplo a seguir mostra o uso da instrução IS EMPTY. A instrução é aplicada sobre uma tabela aninhada que usa um UDT como tipo de definição. A saída mostra o nome dos funcionários que não têm um número de telefone.
Saída¶
EMP_NAME |
|---|
Jane Smith |
Snowflake¶
A consulta do Snowflake mostrada abaixo é a equivalência da funcionalidade da instrução IS EMPTY. Em particular, a instrução IS EMPTY apresenta uma diferença entre um objeto NULL e um objeto EMPTY.
Observe que User-Defined Types são transformados em um VARIANT. O tipo VARIANT no Snowflake é capaz de armazenar objetos e matrizes. Como uma tabela aninhada é uma sequência de informações, o tipo ARRAY é o tipo mais adequado para redefini-las e verificar se o objeto ARRAY está vazio.
A solução equivalente ARRAY_SIZE também permite solicitar a nulidade da tabela aninhada (transformada em VARIANT). Em outras palavras, o tipo VARIANT também pode armazenar NULLs e ARRAYs vazio.
Saída¶
EMP_NAME |
|---|
Jane Smith |
Outras combinações possíveis¶
| Description | Oracle | Snowflake |
|---|---|---|
| Ask for a IS NOT EMPTY | | |
| Ask for NULL instead of EMPTY | | |
Problemas conhecidos¶
1. Os tipos definidos pelo usuário estão sendo transformados em variante.¶
Os tipos definidos pelo usuário não são compatíveis, portanto, são transformados em tipos Variant, o que pode exigir esforço manual para garantir algumas funcionalidades.
Consulte a página a seguir para obter mais informações:
2. Tabelas aninhadas não são compatíveis.¶
No momento, não há suporte para tabelas aninhadas. A melhor abordagem com base nessa equivalência é tratar as tabelas aninhadas como Variant, mas declarar Arrays com dados JSON dentro e executar a função PARSE_JSON do Snowflake para preencher as informações aninhadas.
Leia as páginas a seguir para obter mais informações:
3. Instruções Insert não são compatíveis com tipos definidos pelo usuário.¶
Como os tipos definidos pelo usuário não são suportados, consequentemente, os comandos Insert para esses tipos não são suportados. Especificamente em tabelas aninhadas, a instrução INSERT INTO ... VALUES deve ser alterada para INSERT INTO ...SELECT porque se espera que a função ARRAY_CONSTRUCT seja usada nesse padrão.
Consulte a página a seguir para obter mais informações:
4. A lógica deve ser adaptada para tipos ARRAY.¶
Como as tabelas aninhadas devem ser transformadas de forma equivalente para VARIANT e se comportar como ARRAYs,, a funcionalidade e a lógica dos procedimentos de implementação e a interação com os dados devem ser adaptadas.
Analise os exemplos a seguir:
4.1 Equivalência de procedimentos¶
Oracle¶
Snowflake¶
Saída¶
PROC1 |
|---|
IS EMPTY |
4.2 Instruções Select¶
As saídas podem diferir de tabelas para ARRAYs.
Oracle¶
Saída¶
PHONE_NUMBER |
|---|
1234567890 |
Snowflake¶
Saída¶
PHONE_NUMBERS_COL |
|---|
[ 1234567890 ] |
EWIs relacionados¶
SSC-EWI-0056: Criar tipo não suportado.
SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.
SSC-EWI-0073: Revisão de equivalência funcional pendente.
SSC-EWI-OR0035: A função de tabela não é compatível quando usada como uma coleção de expressões.
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-FDM-0015: Tipo personalizado referenciado na consulta não encontrado.
SSC-FDM-OR0035: DBMS_OUTPUT. Implementação UDF de verificação PUTLINE.
LOCK TABLE¶
Nota
Instrução não relevante.
Aviso
Observe que esta instrução foi removida da migração; porque é uma sintaxe não relevante. Isso significa que não é necessária no Snowflake.
Descrição¶
No Oracle, a instrução LOCK TABLE permite adquirir explicitamente um bloqueio de tabela compartilhado ou exclusivo na tabela especificada. O bloqueio da tabela dura até o final da transação atual. Veja mais informações aqui.
Sintaxe
Amostra de padrões da origem¶
Tabela de bloqueio¶
Observe que, neste exemplo, a instrução LOCK TABLE foi excluída. Isso ocorre porque o Snowflake lida com o bloqueio em um método diferente por meio de transações.
Oracle¶
Snowflake¶
LOG ERROR¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
A instrução
FORALLexecuta uma instrução DML várias vezes, com valores diferentes nas cláusulasVALUESeWHERE. (Instrução FORALL da referência de linguagem Oracle PL/SQL).
Sintaxe do Oracle¶
Aviso
O Snowflake Scripting não tem equivalência direta com a instrução FORALL, mas pode ser emulado com diferentes soluções alternativas para obter equivalência funcional.
Amostra de padrões da origem¶
Dados de configuração¶
Oracle¶
Tabelas¶
Snowflake¶
Tabelas¶
1. MERGE INTO Inside a FORALL¶
Oracle¶
Observação
Os três casos abaixo têm a mesma transformação para o Snowflake Scripting e são funcionalmente equivalentes.
Caso 1¶
Snowflake¶
FORALL com coleção de registros¶
2. FORALL With INSERT INTO¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
3. FORALL With Multiple Fetched Collections¶
Oracle¶
Com INSERT INTO¶
Com UPDATE¶
Resultados INSERT INTO¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
1 |
2 |
Resultados UPDATE¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
Snowflake¶
Com INSERT INTO¶
Com UPDATE¶
Resultados INSERT INTO¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
Resultados UPDATE¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
4. FORALL With Record of Collections¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a script FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
5. FORALL With Dynamic SQL¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000 |
6. FORALL Without LOOPS¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
7. FORALL With UPDATE Statements¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
Snowflake¶
Equivalente a FORALL¶
Resultados¶
8. FORALL With DELETE Statements¶
Oracle¶
Exemplo de FORALL¶
Resultados¶
Snowflake¶
Equivalente a FORALL¶
Resultados¶
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-EWI-0030: A instrução abaixo tem usos de Dynamic SQL.
SSC-EWI-0036: Tipo de dados convertido em outro tipo de dados.
SSC-EWI-0058: A funcionalidade é atualmente incompatível com o Script Snowflake.
SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.
SSC-EWI-OR0129: o atributo TYPE não pôde ser resolvido.
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-FDM-OR0031:. A cláusula de registro de erros nas instruções DML não são compatíveis com o Snowflake.
SSC-PRF-0001: Esta instrução tem usos de operações de busca de cursor em massa.
SSC-PRF-0003: Buscar dentro de um loop é considerado um padrão complexo, o que poderia degradar o desempenho do Snowflake.
LOOP¶
Referência de tradução para converter instrução do Oracle LOOP para Script Snowflake
Descrição¶
A cada iteração da instrução
LOOPbásica, suas instruções são executadas e o controle retorna para o topo do loop. A instruçãoLOOPtermina quando uma instrução dentro do loop transfere o controle fora do loop ou gera uma exceção.\ (Instrução BASIC LOOP da referência de linguagem Oracle PL/SQL)
Sintaxe Oracle BASIC LOOP¶
Sintaxe do Script Snowflake BASIC LOOP¶
O comportamento do Oracle BASIC LOOP também pode ser modificado com o uso das instruções:
Amostra de padrões da origem¶
Caso simples de loop¶
Observação
Esse caso é funcionalmente equivalente.
Oracle¶
Resultado¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Script Snowflake¶
Resultado¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.
OUTPUT PARAMETERS¶
Descrição¶
Um parâmetro de saída é um parâmetro cujo valor é passado do módulo de procedimento/função armazenado para o bloco de chamada PL/SQL. Como os parâmetros de saída não são compatíveis com o Snowflake Scripting, foi implementada uma solução para emular sua funcionalidade.
Amostra de padrões da origem¶
Parâmetro de saída único¶
Oracle¶
Script Snowflake¶
Parâmetro de saída múltipla¶
Oracle¶
Script Snowflake¶
Para verificar se a funcionalidade está sendo emulada corretamente, a consulta a seguir executará o procedimento e um SELECT da tabela mencionada anteriormente.
Oracle¶
Resultado¶
COL1 |
COL2 |
|---|---|
123 |
-1 |
123 |
456 |
Script Snowflake¶
Resultado¶
COL1 |
COL2 |
|---|---|
123.000000000000000000 |
-1 |
123.000000000000000000 |
456.000000000000000000 |
Parâmetros de OUT para tipos de dados do cliente¶
Quando o parâmetro de saída é um tipo de cliente, o processo é semelhante a um tipo de dados regulares.
Oracle¶
Script Snowflake¶
Parâmetros de cursor OUT¶
Os parâmetros de saída de cursor não são compatíveis com o Snowflake; apesar disso, uma solução alternativa que emula o comportamento do Oracle é aplicada ao código transformado. O procedimento com os parâmetros de saída gera uma tabela temporária com um nome dinâmico, e a chamada do procedimento definirá o nome da tabela temporária como uma cadeia de caracteres para criar a tabela dentro da chamada do procedimento.
Oracle¶
Script Snowflake¶
Parâmetros do registro OUT¶
Os registros não são compatíveis nativamente com o Snowflake; no entanto, uma solução alternativa foi usada para emulá-los como parâmetros de saída. Ao definir uma variável OBJECT em vez do registro, podemos emular a estrutura de campo do registro atribuindo o resultado do parâmetro a cada propriedade de objeto. Além disso, para cada campo de registro atribuído como parâmetro de saída, uma nova variável com o tipo de campo será gerada.
Oracle¶
Script Snowflake¶
Variáveis de pacote como parâmetros OUT¶
Pacotes não são compatíveis com o Snowflake, portanto, seus membros locais, como variáveis ou constantes, também devem ser preservados usando uma solução alternativa. Nesse cenário, a variável do pacote seria emulada usando uma variável de sessão que seria atualizada após a definição de uma variável local com o resultado do parâmetro de saída.
Oracle¶
Script Snowflake¶
Problemas conhecidos¶
1. Procedures with output parameters inside packages may not work correctly¶
Atualmente, há um problema ao coletar as informações semânticas dos procedimentos que residem dentro dos pacotes, razão pela qual a transformação dos parâmetros de saída pode funcionar parcialmente ou não funcionar. Já existe um trabalho em andamento para resolver esse problema.
2. Some data types may not work properly¶
Como visto na transformação, ao recuperar o valor dos procedimentos chamados, é realizada uma conversão implícita de VARIANT para o tipo especificado pela variável. Como há muitos tipos de dados possíveis, algumas conversões podem falhar ou conter dados diferentes.
EWIs relacionados¶
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-FDM-0007: Elemento com dependências ausentes.
SSC-FDM-0015: Tipo de dados não reconhecido.
NESTED PROCEDURES¶
Descrição¶
No Oracle PL/SQL, a definição de NESTED PROCEDURES refere-se a um procedimento que é declarado e definido dentro da seção declarativa de outro bloco PL/SQL. Esse bloco pai pode ser um outro procedimento, uma função ou um corpo de pacote. Para obter mais informações, consulte Declarações e definições de procedimento Oracle.
Nota
As transformações descritas abaixo são específicas para procedimentos incorporados em outros procedimentos ou pacotes.
Amostra de padrões da origem¶
Modo de parâmetro IN para procedimentos aninhados¶
A palavra-chave IN será removida, pois os procedimentos aninhados do Snowflake só são compatíveis com parâmetros IN de forma implícita.
Oracle¶
Script Snowflake¶
Modo de parâmetro OUT para procedimentos aninhados¶
Os procedimentos aninhados do SnowScript não são compatíveis com parâmetros de saída. Para replicar esta funcionalidade no Snowflake, um tipo RETURN deve ser criado com base nos parâmetros de saída.
Se houver apenas um parâmetro de saída, ele será retornado no final. Em casos com vários parâmetros de saída, uma construção de objeto será gerada contendo seus valores. Durante a chamada, esses valores serão atribuídos a uma variável e, posteriormente, esses resultados serão atribuídos às variáveis ou parâmetros correspondentes.
Oracle¶
Script Snowflake¶
Vários parâmetros OUT em procedimentos aninhados¶
Oracle¶
Script Snowflake¶
Procedimentos aninhados em vários níveis¶
O Snowflake permite apenas um nível de aninhamento para procedimentos aninhados. Portanto, um procedimento aninhado dentro de outro procedimento aninhado não é compatível. Se isso ocorrer, a transformação incluirá o erro !!!RESOLVE EWI!!! /*** SSC-EWI-0111 - ONLY ONE LEVEL OF NESTING IS ALLOWED FOR NESTED PROCEDURES IN SNOWFLAKE. ***/!!!
Oracle¶
Script Snowflake¶
Valores padrão em procedimentos aninhados¶
Argumentos de procedimento aninhado não são compatíveis com cláusulas padrão. Portanto, se uma chamada de procedimento aninhado omitir um parâmetro opcional, o valor padrão para esse argumento deve ser enviado dentro da chamada do procedimento. SnowConvert AI identifica automaticamente esses cenários e preenche as chamadas de procedimento de forma apropriada.
Oracle¶
Script Snowflake¶
Sobrecarga de procedimentos aninhados¶
O Snowflake não aceita a sobrecarga de procedimentos aninhados. Se isso ocorrer, será adicionado o EWI SSC-EWI-0112 - NESTED PROCEDURE OVERLOADING IS NOT SUPPORTED.
Oracle¶
Script Snowflake¶
Procedimento aninhado sem uma lista de parâmetros¶
No Snowflake, uma definição de procedimento aninhado requer parênteses vazios () para ser sintaticamente válida quando não tem parâmetros; ao contrário do Oracle, onde eles não são necessários. O SnowConvert AI irá adicioná-los automaticamente durante a tradução.
Oracle¶
Script Snowflake¶
Procedimento aninhado com o parâmetro de saída REFCURSOR¶
Oracle¶
Script Snowflake¶
Procedimento aninhado com a opção de parâmetro NOCOPY¶
No Oracle PL/SQL, a palavra-chave NOCOPY é uma dica de otimização para os parâmetros de procedimento OUT e IN OUT. Por padrão, o Oracle passa estes parâmetros por valor, criando uma cópia cara dos dados durante a chamada e copiando-a de volta após a conclusão. Isso pode causar sobrecarga significativa de desempenho para grandes estruturas de dados.
NOCOPY instrui o Oracle a passar por referência, permitindo que o procedimento modifique diretamente os dados originais. Isso elimina a sobrecarga de cópia e melhora o desempenho. Entretanto, as mudanças são imediatas e não serão implicitamente revertidas se ocorrer uma exceção não tratada dentro do procedimento.
Portanto, removeremos a opção de parâmetro NOCOPY e adicionaremos o FDM SSC-FDM-OR0050 - EXCEPTIONS WITH NOCOPY PARAMETERS MAY LEAD TO DATA INCONSISTENCY. Isso ocorre porque a execução do procedimento termina ao atingir uma exceção, impedindo que a instrução RETURN seja alcançada. Como resultado, a variável no bloco de declaração do autor da chamada retém seus valores iniciais, pois o procedimento falha ao retornar com sucesso um novo valor para atribuição.
Oracle¶
Script Snowflake¶
Problemas conhecidos¶
1. Multi-level Nested Procedures¶
Nossos esforços de transformação para procedimentos aninhados no Snowflake são limitados àqueles aninhados diretamente dentro de outros procedimentos, aceitando apenas um nível de aninhamento. Se o nível de aninhamento exceder um, ou se um procedimento for aninhado dentro de uma função autônoma, a transformação não será aceita, e o EWI !RESOLVE EWI! /*** SSC-EWI-0111 - ONLY ONE LEVEL OF NESTING IS ALLOWED FOR NESTED PROCEDURES IN SNOWFLAKE. ***/!!! será adicionado.
2. Nested procedures overloading¶
Além disso, a sobrecarga de procedimentos aninhados não é aceita no Snowflake. Nesses casos, será adicionado o EWI !!!RESOLVE EWI!!! /*** SSC-EWI-0112 - NESTED PROCEDURE OVERLOADING IS NOT SUPPORTED. ***/!!!.
3. Nested procedures within anonymous blocks¶
A transformação de procedimentos aninhados em blocos anônimos está pendente. Será adicionado o EWI !!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED PROCEDURE OR FUNCTION IS NOT SUPPORTED IN THIS SCENARIO ***/!!!.
EWIs relacionados¶
SSC-FDM-OR0050: Exceções com parâmetros
NOCOPYpodem levar a inconsistência de dados.SSC-EWI-OR0057: A transformação para procedimento ou função aninhada não é compatível.
SSC-EWI-0111: Apenas um nível de aninhamento é permitido para procedimentos aninhados no Snowflake.
SSC-EWI-0112: A sobrecarga de procedimentos aninhados é incompatível.
PROCEDURE CALL¶
Referência de tradução para PROCEDURE CALL, também conhecido como SUBPROGRAM INVOCATION
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Esta seção descreve a sintaxe para invocações de subprogramas em blocos PL, como procedimentos ou blocos anônimos.
Para obter mais informações sobre esse assunto, consulte a documentação de subprogramas da Oracle: (Instrução Invocation de subprogramas da referência de linguagem Oracle PL/SQL)
As chamadas de procedimento podem ser migradas para o Snowflake, desde que não haja parâmetros opcionais e que a ordem deles corresponda aos parâmetros formais. Observe que as invocações de procedimentos são migradas para uma instrução Call.
Sintaxe da invocação do subprograma Oracle¶
O Snowflake Scripting tem suporte para essa instrução, embora com algumas diferenças funcionais.
Sintaxe da invocação do subprograma Snow Scripting¶
Amostra de padrões da origem¶
Nota
Considere a próxima tabela e o procedimento para os exemplos abaixo.
Oracle¶
Snowflake¶
Chamada simples¶
Oracle¶
Resultado¶
COL1 |
|---|
1 |
Script Snowflake¶
Resultado¶
COL1 |
|---|
1 |
Chamada de um procedimento com um parâmetro opcional¶
Aviso
Esta amostra contém intervenção manual para algumas diferenças funcionais e é usada para explicá-las. Para obter mais informações sobre essas diferenças, consulte a seção de problemas conhecidos abaixo.
Oracle¶
Resultado¶
COL1 |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Script Snowflake¶
Resultado¶
COL1 |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Problemas conhecidos¶
1. Default parameter reordering¶
Snowflake requires default parameters to appear at the end of the parameter list. SnowConvert AI automatically reorders them and emits an SSC-FDM-0041 notice. When positional callers are detected, they are converted to named arguments.
2. Named parameters are accepted, but not functionally equivalent¶
Named parameters are supported in Snowflake. When default parameters are reordered, SnowConvert AI automatically converts positional call sites to use named arguments to preserve the original semantics.
3. Calling Subprograms with Out Parameters is not supported¶
O Snowflake não tem suporte para modos de parâmetro, mas uma solução está sendo implementada para emular sua funcionalidade. Para obter mais informações sobre a transformação dos parâmetros de saída, consulte o seguinte artigo Parâmetros de saída.
EWIs relacionados¶
SSC-FDM-0041: Default parameters were reordered to the end of the parameter list.
SSC-FDM-0007: Elemento com dependências ausentes.
RAISE¶
Descrição¶
A instrução
RAISElevanta explicitamente uma exceção.Fora de um manipulador de exceção, você deve especificar o nome da exceção. Dentro de um manipulador de exceção, se o nome da exceção for omitido, a instrução
RAISElevanta novamente a exceção atual. (Instrução Raise da referência de linguagem Oracle PL/SQL)
A instrução é totalmente compatível com o Snowflake Scripting, mas você deve levar em conta que pode haver algumas diferenças quando houver uma instrução de Commit e Rollback.
O Snowflake Scripting tem suporte para essa instrução.
Amostra de padrões da origem¶
Lançamento de exceção simples¶
Oracle¶
Resultado¶
Script Snowflake¶
Resultado¶
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.
RAISE_APPICATION_ERROR¶
Referência de tradução para a instrução raise_application_error.
Descrição geral¶
O procedimento RAISE_APPLICATION_ERROR permite emitir mensagens de erro ORA- definidas pelo usuário a partir de subprogramas armazenados. Dessa forma, você pode relatar erros ao aplicativo e evitar o retorno de exceções não tratadas (Documentação do Oracle).
Sintaxe do Oracle¶
Nota
O error_number é um número inteiro negativo no intervalo -20000 .. -20999 e message é uma cadeia de caracteres de até 2048 bytes.
Se o terceiro parâmetro opcional for TRUE, o erro será colocado na pilha de erros anteriores. Se o parâmetro for FALSE (o padrão), o erro substitui todos os erros anteriores.
A instrução equivalente no Snowflake é a cláusula RAISE. No entanto, é necessário declarar a exceção definida pelo usuário como uma variável antes de chamar a instrução RAISE para ela.
Sintaxe do Snowflake¶
Nota
Para obter mais informações, consulte a documentação do Snowflake a seguir.
Amostra de padrões da origem¶
1. Exception in functions without declaring section¶
Nesse cenário, a função sem uma seção de declaração é convertida em um procedimento com a declaração de exceção. Observe que:
O nome da variável de exceção é declarado em letras maiúsculas.
O nome da variável de exceção é baseado na descrição e o final é composto por um nome de código de exceção seguido por um número consecutivo.
A seção de declaração é criada mesmo que a função ou o procedimento inicial não a contenha.
Oracle¶
Saída¶
Snowflake¶
Saída¶
2. Exception code number outside limits¶
O exemplo a seguir mostra a conversão comentada no corpo do procedimento. Isso ocorre porque o código está fora dos limites de código aplicáveis no Snowflake. A solução é alterar o código de exceção para um código disponível na seção de consulta.
Oracle¶
Saída¶
Snowflake¶
Saída¶
3. Exception stack functionality¶
A funcionalidade da pilha de exceções não é compatível com o Snowflake e foi removida da declaração de exceções.
Oracle¶
Saída¶
Snowflake¶
Saída¶
4. Multiple exceptions with the same exception code¶
Várias exceções com o mesmo nome podem coexistir na seção de declaração e nas instruções de aumento.
Oracle¶
Saída¶
Snowflake¶
Saída¶
Problemas conhecidos¶
A função SQLREM pode ser revisada.
O número do código de exceção fora dos limites aplicáveis no Snowflake deve ser alterado para um código de exceção disponível.
Não há suporte para adicionar a uma pilha de erros.
EWIs relacionados¶
SSC-EWI-OR0099: O código de exceção excede o limite do Script Snowflake.
SSC-FDM-0029: a função definida pelo usuário foi transformada em um procedimento Snowflake.
SSC-FDM-OR0011: o argumento booleano foi removido porque as opções «adicionar à pilha» não são compatíveis.
UDF CALL¶
Referência de tradução para a chamada de função definida pelo usuário (UDF)
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Como é amplamente reconhecido, as funções não escalares definidas pelo usuário (UDFs) no Oracle são convertidas em procedimentos armazenados Snowflake para acomodar funcionalidades mais complexas.
Essa transformação também altera a forma como a função é invocada, passando de uma chamada de função tradicional para uma chamada de procedimento armazenado.
Para obter mais detalhes sobre a invocação de procedimentos armazenados, consulte a documentação disponível aqui: PROCEDURE CALL.
Amostra de padrões da origem¶
Nota
Considere a função e as tabelas a seguir para os exemplos abaixo.
Oracle¶
Snowflake¶
Chamada UDF¶
Oracle¶
Resultado¶
Script Snowflake¶
Resultado¶
Chamada UDF dentro de uma consulta¶
Quando uma chamada de função é incorporada em uma consulta, o processo de invocação se torna mais complexo devido à limitação do Snowflake de não poder chamar procedimentos diretamente nas consultas. Para superar essa limitação, a invocação do procedimento é movida para fora da consulta e o resultado é atribuído a uma variável. Essa variável é, então, referenciada na consulta, alcançando assim a equivalência funcional. Essa abordagem permite a execução de comportamentos mais complexos dentro das consultas do Snowflake e, ao mesmo tempo, obedece às restrições processuais.
Oracle¶
Resultado¶
Script Snowflake¶
Resultado¶
Problemas conhecidos¶
1. Unsupported Usage of UDFs in Queries with Query Dependencies¶
Ao chamar funções definidas pelo usuário (UDFs) em consultas com dependências de consultas, não há suporte para cenários que envolvam funções incorporadas com colunas como argumentos. Essa limitação ocorre porque os valores das colunas não podem ser acessados de fora da consulta. Exemplos de cenários sem suporte incluem:
\ Os cenários compatíveis incluem chamadas de função com outros tipos de argumentos, como valores literais, variáveis externas ou parâmetros. Por exemplo:
Nos cenários suportados, a função pode ser efetivamente migrada.
EWIs relacionados¶
SSC-EWI-0073: Revisão de equivalência funcional pendente.
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-FDM-0029: a função definida pelo usuário foi transformada em um procedimento Snowflake.
WHILE¶
Referência de tradução para converter instrução do Oracle WHILE para Script Snowflake
Descrição¶
A instrução
WHILELOOPexecuta uma ou mais instruções enquanto uma condição éTRUE.\ (Instrução WHILE da referência de linguagem Oracle PL/SQL)
Sintaxe Oracle WHILE¶
Sintaxe Script Snowflake WHILE¶
O comportamento do Oracle WHILE também pode ser modificado com o uso das instruções:
Amostra de padrões da origem¶
Caso simples de While¶
Observação
Esse caso é funcionalmente equivalente.
Oracle¶
Resultado¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Script Snowflake¶
Resultado¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.