SnowConvert AI - Oracle - COLLECTIONS AND RECORDS¶
Referência de tradução para converter Oracle COLLECTIONS e RECORDS para Script Snowflake
Aviso
Esta seção é um trabalho em andamento, as informações podem mudar no futuro.
Descrição geral¶
PL/SQL permite que você defina dois tipos de dados compostos: coleção e registro, em que composto é um tipo de dados que armazena valores que têm componentes internos.
Em uma coleção, os componentes internos sempre têm o mesmo tipo de dados e são chamados de elementos.
Em um registro, os componentes internos podem ter diferentes tipos de dados e são chamados de campos. (COLLECTIONS AND RECORDS da referência de linguagem Oracle PL/SQL)
Nota
Leve em conta a referência de tradução de instrução CREATE TYPE, pois algumas soluções alternativas podem se sobrepor e podem ser funcionais em ambos os cenários.
Limitações¶
O Snowflake não oferece suporte a tipos de dados definidos pelo usuário, o que inclui Coleções e registros PL, de acordo com a documentação on-line Tipos de dados sem suporte, mas oferece suporte a Tipos de dados semiestruturados, que podem ser usados para imitar a estrutura hierárquica do registro e a estrutura de elementos dos tipos definidos pelo usuário da coleção. Por esse motivo, há vários tipos de recursos que não têm solução alternativa.
A seguir, os recursos para os quais NO propõe uma solução alternativa:
O tamanho da variável não pode exceder 16MB¶
O Snowflake define o tamanho máximo de VARIANT, OBJECT e ARRAY em 16MBs. Isso significa que, se um registro, uma coleção ou qualquer elemento de qualquer um deles exceder esse tamanho, isso causará um erro de tempo de execução.
A capacidade do varray não pode ser limitada¶
Os varrays da Oracle oferecem a capacidade de limitar o número de elementos dentro deles. Isso não é suportado pelo Snowflake.
Proposta de solução alternativa¶
Sobre a definição dos tipos de registro¶
A solução proposta é usar um tipo de dados semiestruturado «OBJECT» para imitar o tipo de dados da Oracle.
Sobre a definição dos tipos de coleção¶
Há duas soluções alternativas diferentes que dependem do tipo de coleção a ser migrada:
Matrizes associativas têm proposta para alteração para um tipo de dados semiestruturados «OBJECT».
Propõe-se que as matrizes e as matrizes de tabelas aninhadas sejam transformadas em um tipo de dados semiestruturado «ARRAY».
Suporte atual do SnowConvert AI¶
The next table shows a summary of the current support provided by the SnowConvert AI tool. Please keep in mind that translations may still not be final, and more work may be needed.
Sub-recurso |
Status atual de reconhecimento |
Status atual da tradução |
Tem soluções alternativas conhecidas |
|---|---|---|---|
Reconhecido. |
Não traduzido. |
Sim. |
|
Não reconhecido. |
Não traduzido. |
Sim. |
|
Reconhecido. |
Não traduzido. |
Sim. |
|
Reconhecido. |
Não traduzido. |
Sim. |
Problemas conhecidos¶
1. Associate Arrays are considered a Nested Table¶
Atualmente, o SnowConvert AI não diferencia entre uma matriz associativa e uma tabela aninhada, o que significa que elas são misturadas nas mesmas contagens de avaliação.
Definição do tipo de matriz associativa¶
Esta é uma referência de tradução para converter a Declaração de Matriz Associativa Oracle em Snowflake
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¶
Uma matriz associativa (anteriormente chamada de tabela ou índice-por-tabela PL/SQL) é um conjunto de pares chave-valor. Cada chave é um índice exclusivo, usado para localizar o valor associado com a sintaxe
variable_name(index).O tipo de dados de
indexpode ser do tipo cadeia de caracteres (VARCHAR2,VARCHAR,STRINGouLONG) ouPLS_INTEGER. Os índices são armazenados em ordem de classificação, não em ordem de criação. Para os tipos de cadeia de caracteres, a ordem de classificação é determinada pelos parâmetros de inicializaçãoNLS_SORTeNLS_COMP.(ASSOCIATIVE ARRAYS da referência de linguagem Oracle PL/SQL)
Aviso
Não confundir com a definição do tipo PL/SQL NESTED TABLE .
Para a conversão, a definição do tipo é substituída por um OBJECT Tipo de dados semiestruturados e, em seguida, seus usos são alterados de acordo com todas as operações.
To define an Associative Array type, the syntax is as follows:
Para declarar uma variável desse tipo:
Amostra de padrões da origem¶
Matriz associativa indexada a Varchar¶
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
1 |
3 |
4 |
2 |
3 |
Snowflake¶
Observe o parâmetro “true” no OBJECT_INSERT. Isso serve para que o elemento seja atualizado se já estiver presente na matriz.
Resultado¶
DBMS OUTPUT |
|---|
1 |
3 |
4 |
2 |
3 |
Matriz associativa com índice numérico¶
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Snowflake¶
Observe que o valor numérico é convertido em varchar de acordo com a necessidade da operação. Além disso, observe o parâmetro “true” em OBJECT_INSERT. Isso serve para que o elemento seja atualizado se já estiver presente na matriz.
Resultado¶
DBMS OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Matriz associativa indexada numérica de elemento de registro¶
Nesse caso, a matriz associativa é composta por uma estrutura de registro, e essa estrutura precisa ser preservada. Para isso, foram adicionadas outras operações de inserção.
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Snowflake¶
Nesse cenário, a inserção/atualização pressupõe a criação automática do registro dentro da matriz associativa e isso precisa ser levado em conta ao criar novos registros.
Resultado¶
DBMS OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Problemas conhecidos¶
1. They are currently not being recognized¶
O SnowConvert AI trata essas coleções como arrays de tabelas aninhadas. Há um item de trabalho para corrigir isso.
EWIs relacionados¶
Sem EWIs relacionados.
Métodos de coleta¶
Esta é uma referência de tradução para converter os métodos de coleção Oracle em Snowflake
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¶
Um método de coleção é um subprograma PL/SQL - uma função que retorna informações sobre uma coleção ou um procedimento que opera em uma coleção. Os métodos de coleção tornam as coleções mais fáceis de usar e os aplicativos mais fáceis de manter.
(COLLECTION METHODS da referência de linguagem Oracle PL/SQL)
Alguns desses métodos podem ser mapeados para operações semiestruturadas nativas do Snowflake. Os que não puderem ou tiverem diferenças serão mapeados para uma implementação de UDF.
Suporte atual do SnowConvert AI¶
The next table shows a summary of the current support provided by the SnowConvert AI tool. Please keep in mind that translations may still not be final, and more work may be needed.
Método |
Status atual de reconhecimento |
Status atual da tradução |
Mapeado para |
|---|---|---|---|
Não reconhecido. |
Não traduzido. |
UDF |
|
Não reconhecido. |
Não traduzido. |
UDF (A ser definido) |
|
Não reconhecido. |
Não traduzido. |
UDF |
|
Não reconhecido. |
Não traduzido. |
||
Não reconhecido. |
Não traduzido. |
UDF |
|
Não reconhecido. |
Não traduzido. |
UDF |
|
Não reconhecido. |
Não traduzido. |
||
Não reconhecido. |
Não traduzido. |
Sem suporte. |
|
Não reconhecido. |
Não traduzido. |
UDF (A ser definido) |
|
Não reconhecido. |
Não traduzido. |
UDF (A ser definido) |
Amostra de padrões da origem¶
COUNT¶
Esse método retorna a contagem de elementos «não definidos» (não confundir com nulos) em uma coleção (as tabelas aninhadas podem se tornar esparsas, deixando esses elementos no meio). Em matrizes associativas, ele retorna o número de chaves na matriz.
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
2 |
3 |
4 |
Snowflake¶
O equivalente no Snowflake é o método ARRAY_SIZE.
Resultado¶
DBMS OUTPUT |
|---|
2 |
3 |
4 |
EXISTS¶
Esse método retorna True se o elemento fornecido estiver contido na coleção. Em arrays associativos, ele testa se a chave está contida.
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
2 |
3 |
4 |
Snowflake¶
O equivalente no Snowflake é o método ARRAY_CONTAINS. Observe que, ao usar elementos Varchar, é necessário fazer a conversão para Variant.
Resultado¶
DBMS OUTPUT |
|---|
2 |
3 |
4 |
FIRST/LAST¶
Esses dois métodos retornam o primeiro/último elemento da coleção, respectivamente. Se a coleção estiver vazia, ele retornará null. Essa operação é mapeada para um UDF, que será adicionado em revisões futuras.
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
abc |
bca |
–Estes espaços vazios são devido a sua avaliação como nulo |
1 |
4 |
Snowflake¶
UDFs¶
Resultado¶
DBMS OUTPUT |
|---|
abc |
bca |
–Estes espaços vazios são devido a sua avaliação como nulo |
1 |
4 |
DELETE¶
Esse método é usado para remover elementos de uma coleção. Ele tem três variantes possíveis:
.DELETE remove todos os elementos.
.DELETE(n) remove o elemento cujo índice corresponde a “n”.
.DELETE(n, m) remove os índices de “n” a “m”.
Nota
No Oracle, o uso dessa operação em tabelas aninhadas faz com que elas tenham elementos «indefinidos» devido ao fato de serem esparsas.
Aviso
Observe que a segunda e a terceira versões não se aplicam a Varrays.
Oracle¶
Para simplificar, esse exemplo verifica apenas o número de elementos, mas pode ser modificado para exibir o conteúdo de cada coleção.
Resultado¶
DBMS OUTPUT |
|---|
0 |
0 |
3 |
2 |
0 |
3 |
1 |
Snowflake¶
O Snowflake não oferece suporte a exclusões de um ARRAY existente e, por esse motivo, a única solução alternativa oferecida é reconstruir um novo ARRAY dependendo dos parâmetros originais do DELETE.
Nota
Observe que um UDF foi adicionado para implementar a funcionalidade de atualização do elemento.
Este UDF será adicionado em revisões posteriores.
Resultado¶
DBMS OUTPUT |
|---|
0 |
0 |
3 |
2 |
0 |
3 |
1 |
EXTEND¶
Esse método é usado para acrescentar novos elementos a uma tabela aninhada ou a Varray. Ele tem três variantes possíveis:
.EXTEND insere um elemento null.
.EXTEND(n) insere “n” elementos null.
.EXTEND(n, i) insere “n” cópias do elemento em “i”.
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
5 |
5 |
5 |
Snowflake¶
Nota
Observe que um UDF foi adicionado para implementar a funcionalidade de atualização do elemento.
Este UDF será adicionado em revisões posteriores.
Resultado¶
DBMS OUTPUT |
|---|
5 |
5 |
5 |
TRIM¶
Esse método é usado para remover os últimos elementos de uma tabela aninhada ou de uma Varray. Ele tem duas variantes possíveis:
.TRIM remove o último elemento.
.TRIM(n) remove os últimos “n” elementos.
Nota
Essa funcionalidade pode ser implementada usando ARRAY_SLICE
Oracle¶
Resultado¶
LIMIT¶
Esse método retorna o limite máximo de um Varray.
Perigo
Esse método não é compatível com o Snowflake.
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
5 |
6 |
PRIOR/NEXT¶
Esse método retorna o índice anterior/próximo, dado um índice. Se não houver um anterior/próximo, ele retornará null. Ele é usado com mais frequência para percorrer uma coleção.
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
– Os espaços vazios são devido a resultados nulos |
1 |
3 |
abc |
jkl |
jkl |
Problemas conhecidos¶
1. Limit method is not supported in Snowflake¶
O Snowflake não tem suporte para varrays de espaço limitado. Por esse motivo, esse método não é compatível.
EWIs relacionados¶
Sem EWIs relacionados
Definição do tipo de matriz de tabela aninhada¶
Esta é uma referência de tradução para converter a Declaração de Matriz de Tabela Aninhada Oracle em Snowflake
Aviso
Esta seção é um trabalho em andamento, as informações podem mudar no futuro.
Nota
Esta seção é para a cersão PL/SQL das matrizes de tabelas aninhadas; para a versão autônoma, consulte Definição do tipo de tabela aninhada.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
No banco de dados, uma tabela aninhada é um tipo de coluna que armazena um número não especificado de linhas em nenhuma ordem específica.
Quando você recupera um valor de tabela aninhada do banco de dados em uma variável de tabela aninhada PL/SQL, PL/SQL fornece às linhas índices consecutivos, começando em 1. Usando esses índices, você pode acessar as linhas individuais da variável da tabela aninhada. A sintaxe é
variable_name(index). Os índices e a ordem das linhas de uma tabela aninhada podem não permanecer estáveis à medida que você armazena e recupera a tabela aninhada do banco de dados.
Para a conversão, a definição do tipo é substituída por um ARRAY Tipo de dados semiestruturados e, em seguida, seus usos são alterados de acordo com todas as operações. Observe como a conversão para tabelas aninhadas e Varrays é a mesma.
To define a Nested Table Array type, the syntax is as follows:
Para declarar uma variável desse tipo:
Amostra de padrões da origem¶
Definições de matriz de tabela aninhada¶
Isso ilustra como criar diferentes matrizes de tabelas aninhadas e como migrar as definições das variáveis.
Oracle¶
Snowflake¶
Iteração de tabela aninhada¶
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Snowflake¶
Nota
Observe que um UDF foi adicionado para implementar a funcionalidade de atualização do elemento.
Este UDF será adicionado em revisões posteriores.
UDF¶
Resultado¶
DBMS OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Problemas conhecidos¶
1. They are currently not being converted¶
O SnowConvert AI não oferece suporte à tradução desses elementos.
2. Indexing needs to be modified¶
Os índices do Oracle começam em 1; no Snowflake, eles começarão em 0.
EWIs relacionados¶
Sem EWIs relacionados
Definição do tipo de registro¶
Esta é uma referência de tradução para converter a Declaração de Registro Oracle em Snowflake
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¶
Uma variável de registro é uma variável composta cujos componentes internos, chamados de campos, podem ter diferentes tipos de dados. O valor de uma variável de registro e os valores de seus campos podem mudar.
Você faz referência a uma variável de registro inteira pelo seu nome. Você faz referência a um campo de registro com a sintaxe
record.field.Você pode criar uma variável de registro de qualquer uma dessas maneiras:
Defina um tipo de registro e, em seguida, declare uma variável desse tipo.
Use
%ROWTYPEpara declarar uma variável de registro que representa uma linha completa ou parcial de uma tabela ou visualização de banco de dados.Use
%TYPEpara declarar uma variável de registro do mesmo tipo que uma variável de registro declarada anteriormente.
Para a conversão, a definição do tipo é substituída por um OBJECT Tipo de dados semiestruturados e, em seguida, seus usos são alterados de acordo com todas as operações.
To define a Record type, the syntax is as follows:
Para declarar uma variável desse tipo:
Amostra de padrões da origem¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Inicialização e atribuição de registros¶
Esse exemplo tenta inserir duas novas linhas usando uma variável de registro que é reatribuída no meio do procedimento.
Oracle¶
Resultado¶
COL1 |
COL2 |
|---|---|
1,5 |
1 |
2.5 |
2 |
Snowflake¶
Observe como as reatribuições são substituídas por um OBJECT_INSERT que é atualizado se a coluna já existir, e como a cláusula VALUES é substituída por SELECT.
Resultado¶
COL1 |
COL2 |
|---|---|
1,5 |
1 |
2.5 |
2 |
Registro de %ROWTYPE e registro de valores¶
Como as operações são as que definem a estrutura, essas definições podem ser substituídas por um tipo de dados OBJECT, mas os valores do registro precisam ser decompostos, pois não há suporte para a inserção do registro «como está».
Oracle¶
Resultado¶
COL1 |
COL2 |
COL3 |
|---|---|---|
1 |
«Hello» |
25-DEC-20 |
Snowflake¶
Please note finally how the OBJECT variable needs to be initialized to add the information to it.
Resultado¶
COL1 |
COL2 |
COL3 |
|---|---|---|
1 |
«Hello» |
25-DEC-20 |
Obtenção de dados em um registro¶
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
1 |
Hello |
25-DEC-20 |
Snowflake¶
Observe o OBJECT_CONSTRUCT adicional na definição do Cursor, pois é isso que permite extrair um OBJECT, que pode ser usado para migrar sem problemas a instrução FETCH.
Resultado¶
DBMS OUTPUT |
|---|
1 |
Hello |
25-DEC-20 |
Atribuição de uma variável de registro em uma SELECT INTO¶
Essa transformação consiste em aproveitar a função OBJECT_CONTRUCT para inicializar o registro usando as colunas SELECT como argumentos.
Exemplo de código auxiliar¶
Oracle¶
Snowflake¶
Oracle¶
Resultado¶
COL1 |
COL2 |
|---|---|
SELECT 1 |
NAME 1 |
SELECT 2 |
NAME 2 |
SELECT 3 |
NAME 3 |
SELECT 4 |
NAME 4 |
Snowflake¶
Resultado¶
COL1 |
COL2 |
|---|---|
SELECT 1 |
NAME 1 |
SELECT 2 |
NAME 2 |
SELECT 3 |
NAME 3 |
SELECT 4 |
NAME 4 |
Problemas conhecidos¶
1. The following functionalities are currently not being converted:¶
Busca de dados em um registro.
Registros aninhados (registros dentro de registros).
Coleções dentro de registros.
EWIs relacionados¶
SSC-EWI-0036: Tipo de dados convertido em outro tipo de dados.
SSC-EWI-0056: Criação de tipo sem suporte
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-FDM-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente.
SSC-FDM-OR0035: DBMS_OUTPUT. Implementação UDF de verificação PUTLINE.
SSC-PRF-0003: Fetch dentro de um loop é considerado um padrão complexo, o que pode degradar o desempenho do Snowflake.
Definição do tipo Varray¶
Esta é uma referência de tradução para converter a instrução Oracle Varray para Snowflake
Aviso
Esta seção é um trabalho em andamento, as informações podem mudar no futuro.
Nota
Esta seção é para a versão PL/SQL de Varrays; para a versão autônoma, consulte Definição do tipo de matriz.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Um varray (variable-size array) é um array cujo número de elementos pode variar de zero (vazio) até o tamanho máximo declarado.
Para acessar um elemento de uma variável varray, use a sintaxe
variable_name(index). O limite inferior deindexé 1; o limite superior é o número atual de elementos. O limite superior muda à medida que você adiciona ou exclui elementos, mas não pode exceder o tamanho máximo. Quando você armazena e recupera um varray do banco de dados, seus índices e a ordem dos elementos permanecem estáveis.
Para a conversão, a definição do tipo é substituída por um ARRAY Tipo de dados semiestruturados e, em seguida, seus usos são alterados de acordo com todas as operações. Observe como a conversão para tabelas aninhadas e Varrays é a mesma.
To define a varray type, the syntax is as follows:
Para declarar uma variável desse tipo:
Amostra de padrões da origem¶
Definições de varray¶
Isso ilustra três maneiras diferentes de criar um varray e como migrar essas definições para as variáveis.
Oracle¶
Snowflake¶
Iteração de varray¶
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Snowflake¶
Nota
Observe que um UDF foi adicionado para implementar a funcionalidade de atualização do elemento.
Este UDF será adicionado em revisões posteriores.
UDF¶
Resultado¶
DBMS OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Problemas conhecidos¶
1. They are currently not being converted¶
O SnowConvert AI não oferece suporte à tradução desses elementos.
2. Indexing needs to be modified¶
Os índices do Oracle começam em 1; no Snowflake, eles começarão em 0.
3. Array Density may not match the original¶
Como o tipo de dados ARRAY pode se tornar esparso, é preciso ter cuidado ao fazer adições ou exclusões da matriz. Usar ARRAY_COMPACT() após essas operações pode ser útil se a densidade for uma preocupação.
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-0073: Revisão de equivalência funcional pendente.
SSC-EWI-OR0108: A seguinte instrução de atribuição não é compatível com o Script Snowflake.
SSC-FDM-OR0035: DBMS_OUTPUT. Implementação UDF de verificação PUTLINE.
Operações de coleta em massa¶
Esta é uma referência de tradução para converter as operações em massa da coleção Oracle para Snowflake
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¶
A cláusula
BULKCOLLECT, um recurso de SQL em massa, retorna resultados SQL para PL/SQL em lotes, em vez de um de cada vez.A cláusula
BULKCOLLECTpode aparecer em:
Instrução
SELECT``INTOInstrução
FETCHCláusu
RETURNINGINTOde:
Instrução
DELETEInstrução
INSERTInstrução
UPDATEInstrução
EXECUTE``IMMEDIATECom a cláusula
BULKCOLLECT, cada uma das instruções anteriores recupera um conjunto de resultados inteiro e o armazena em uma ou mais variáveis de coleção em uma única operação (o que é mais eficiente do que usar uma instrução de loop para recuperar uma linha de resultado por vez).
(BULK COLLECT CLAUSE da referência de linguagem Oracle PL/SQL)
Esta seção apresenta algumas soluções alternativas para SELECTs e cursor FETCH com cláusulas em massa.
Amostra de padrões da origem¶
Tabela de origem¶
Oracle¶
Snowflake¶
Coleta em massa de uma tabela¶
Oracle¶
Resultado¶
DBMS OUTPUT |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
Snowflake¶
Perigo
EXECUTE IMMEDIATE com a cláusula Bulk Collect não tem soluções alternativas oferecidas.
Nota
Observe que, embora o cursor FETCH possa ser preservado em sua maior parte, é recomendável que seja alterado para instruções SELECT sempre que possível por questões de desempenho.
Resultado¶
DBMS OUTPUT |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
– EXECUTE IMMEDIATE NOT EXECUTED, não é compatível |
Caso de instrução SELECT INTO¶
Nesse caso, a especificação de conversão usa RESULTSETs. Consulte a documentação das instruções WITH, SELECT e BULK COLLECT INTO aqui:
Problemas conhecidos¶
1. Heavy performance issues on FETCH Cursor workaround¶
A solução alternativa para o cursor Fetch tem grandes requisitos de desempenho devido à tabela Temporary. É recomendável que eles sejam migrados manualmente para instruções SELECT
2. Execute immediate statements are not transformed¶
Não são compatíveis com o SnowConvert AI mas pode ser manualmente alterados para instruções SELECT.
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-0073: Revisão de equivalência funcional pendente
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-EWI-OR0108: A seguinte instrução de atribuição não é compatível com o Script Snowflake.
SSC-FDM-OR0035: DBMS_OUTPUT. Implementação UDF de verificação PUTLINE.
SSC-PRF-0001: Esta instrução tem usos de operações de busca de cursor em massa.
SSC-EWI-0030: A instrução abaixo tem usos de SQL dinâmico
Instruções WITH, SELECT e BULK COLLECT INTO¶
Perigo
Esta seção é uma especificação de conversão. As informações podem mudar no futuro.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Esta seção é uma especificação de conversão para a instrução WITH subsequente a uma instrução SELECT que usa uma instrução BULK COLLECT INTO. Para obter mais informações, consulte a documentação a seguir:
[Tradução de coleção em massa do SnowConvert AI](# Contas-collect-from-a-table).
Amostra de padrões da origem¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
A consulta a seguir é usada para os exemplos a seguir.
Oracle¶
Snowflake¶
1. Inside procedure simple case¶
Perigo
Essa é uma abordagem que usa um tipo de dados de conjunto de resultados. Os tipos definidos pelo usuário devem ser revisados. Consulte a seguinte documentação do Snowflake para obter mais informações sobre RESULTSETs.
O exemplo a seguir usa um tipo definido pelo usuário e é declarado indiretamente como uma tabela. A conversão para esse caso implementa um RESULTSET como um tipo de dados no Snowflake. O conjunto de resultados é armazenado em uma variável que deve ser retornada em uma função TABLE().
Oracle¶
Resultado¶
Nota
A consulta não retorna resultados, mas as informações coletadas esperadas seriam as IT Salary Information usadas no exemplo:
IT_Salary |
|---|
75000 |
80000 |
Perigo
Uma das limitações de RESULTSETs é que ele não pode ser usado como tabela. Por exemplo: select * from my_result_set; (Isso é um erro, consulte a documentação a seguir para obter mais informações).
Snowflake¶
Resultado¶
SALARY |
|---|
77500 |
80000 |
2. Simple case for iterations: FOR LOOP statement¶
O caso a seguir é para definir uma conversão para iteração com FOR...LOOP. Nesse caso, o tipo definido pelo usuário é implicitamente uma tabela, portanto, é possível usar um cursor para iterar. Consulte a documentação a seguir para saber mais:
Documentação do Snowflake sobre o retorno de uma tabela para um cursor
Nesse caso, é necessário criar um cursor para a iteração. Examine a seguinte documentação sobre a sintaxe de atribuição de cursor.
Oracle¶
Resultado¶
Snowflake¶
Resultado¶
SIMPLE_PROCEDURE |
|---|
Average Salary for IT Department: 77500 |
Problemas conhecidos¶
1. Resulset limitations.¶
Há limitações ao usar o tipo de dados RESULTSET. Consulte a seguinte documentação do Snowflake para saber mais. As limitações marcantes são as seguintes:
A declaração de uma coluna do tipo RESULTSET.
A declaração de um parâmetro do tipo RESULTSET.
Declarando o tipo de retorno de um procedimento armazenado como um RESULTSET.
2. Execute statements with Bulk Collect clause are not supported.¶
Consulte a seguinte documentação.
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-0073: Revisão de equivalência funcional pendente
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-EWI-OR0072: Membros de procedimento sem suporte
SSC-EWI-OR0104: Variável de coleção não utilizável.
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
SSC-FDM-OR0035: DBMS_OUTPUT. Implementação UDF de verificação PUTLINE.