SnowConvert AI - Oracle - CREATE FUNCTION¶
Criação de função Oracle para Snowflake Snow Scripting
Descrição¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Uma função armazenada (também chamada de função de usuário ou função definida pelo usuário) é um conjunto de instruções PL/SQL que você pode chamar pelo nome. As funções armazenadas são muito semelhantes aos procedimentos, exceto pelo fato de que uma função retorna um valor ao ambiente em que é chamada. As funções de usuário podem ser usadas como parte de uma expressão SQL.
Uma especificação de chamada declara um método Java ou uma rotina de linguagem de terceira geração (3GL) para que possa ser chamada a partir de PL/SQL. Você também pode usar a instrução
CALLSQL para chamar esse método ou rotina. A especificação de chamada informa ao Oracle Database qual método Java, ou qual função nomeada em qual biblioteca compartilhada, deve ser invocada quando uma chamada é feita. Ele também informa ao banco de dados quais conversões de tipo devem ser feitas para os argumentos e o valor de retorno. Função Create da referência de linguagem Oracle SQL.
Sintaxe do Oracle¶
For more information, see the Oracle CREATE FUNCTION documentation.
Sintaxe da função de criação da Oracle¶
Sintaxe do Snowflake¶
O Snowflake permite 3 idiomas diferentes em suas funções definidas pelo usuário:
SQL
JavaScript
Java
Por enquanto, o SnowConvert AI será compatível somente com SQL e JavaScript como linguagens de destino.
For more information, see the Snowflake UDF overview.
SQL¶
Nota
Funções SQL definidas pelo usuário suportam apenas uma consulta como corpo. Elas podem ler do banco de dados, mas não têm permissão para gravar ou modificar (SQL UDFs escalares).
JavaScript¶
Nota
Funções JavaScript definidas pelo usuário permitem várias instruções em seus corpos, mas não podem realizar consultas ao banco de dados. (JavaScript UDFs escalares).
Amostra de padrões da origem¶
Amostra de dados auxiliares¶
Nota
Esse código foi executado para uma melhor compreensão dos exemplos:
Oracle¶
Snowflake¶
Problemas conhecidos¶
Não foram encontrados problemas.
Cursor para uma variável de retorno¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Esse padrão define uma função no Oracle PL/SQL que usa um cursor para buscar um único valor e retorná-lo.
Componentes:
Declaração de função:
CREATE FUNCTION functionName(parameters) RETURN returnTypeDeclara a função com os parâmetros de entrada e o tipo de retorno.
Instruções de variáveis:
Declara variáveis, inclusive a variável de retorno.
Declaração de cursor:
CURSOR cursorName IS SELECT singleColumn FROM ... WHERE ... [AND col1 = localVar1];Define um cursor para selecionar uma única coluna de uma tabela com condições de filtragem opcionais.
Bloco BEGIN-END:
Atribuição de variáveis.
Abre o cursor.
Busca o resultado na variável de retorno.
Fecha o cursor.
Retorna o valor buscado.
Nesse caso, as variáveis são transformadas em uma expressão de tabela comum (CTE). Assim como a consulta dentro do cursor ao qual, além disso, a cláusula FETCH FIRST 1 ROW ONLY é adicionada para simular o comportamento FETCH CURSOR.
RETURN é transformada no select final.
Consultas¶
Oracle¶
Snowflake¶
Resultado¶
FUNC1() |
|---|
2004-05-03. |
Oracle¶
Snowflake¶
Resultado¶
FUNC1() |
|---|
2004-05-03. |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-FDM-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente.
SSC-EWI-0073: Revisão de equivalência funcional pendente.
Cursor com a instrução IF¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Esse padrão define uma função que usa condicionalmente um cursor para buscar e retornar um valor com base em uma instrução IF.
Componentes:
Declaração de função:
CREATE FUNCTION functionName(parameters) RETURN returnTypeDeclara a função com os parâmetros de entrada e o tipo de retorno.
Declaração de cursor:
CURSOR cursorName IS SELECT singleColumn FROM ... WHERE ... [AND col1 = localVar1];Define um cursor para selecionar uma única coluna de uma tabela com condições de filtragem opcionais.
Declaração de variáveis:
Declara variáveis, inclusive a variável de retorno.
Bloco BEGIN-END com instrução IF:
Atribuição de variáveis.
Verifique se uma condição é verdadeira.
Se verdadeiro, abre o cursor, busca o resultado na variável de retorno, fecha o cursor e retorna o valor buscado. (O cursor também pode ser aberto no bloco
ELSEe deve atender às mesmas condições)O bloco
ELSEé opcional; se existir, deverá conter apenas um único comando que pode ser uma atribuição ou um comandoRETURN.
As variáveis são transformadas em uma expressão de tabela comum (CTE). Assim como a consulta dentro do cursor ao qual, além disso, a cláusula FETCH FIRST 1 ROW ONLY é adicionada para simular o comportamento FETCH CURSOR.
A instrução IF/ELSE pode ser tratada usando CASE EXPRESSION dentro de select, permitindo condicionais dentro das consultas. A instrução RETURN é transformada no select final.
Consultas¶
Oracle¶
Snowflake¶
Resultado¶
FUNC2(0) |
|---|
NULL |
FUNC2(1) |
|---|
33 |
Oracle¶
Snowflake¶
Resultado¶
FUNC2(0) |
|---|
33 |
FUNC2(1) |
|---|
2 |
Oracle¶
Snowflake¶
Resultado¶
FUNC2(0) |
|---|
0 |
FUNC2(1) |
|---|
33 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados
Multiple IF statement¶
Esse padrão define uma função que usa instruções condicionais sobre variáveis locais.
Componentes:
Declaração de função:
CREATE FUNCTION functionName(parameters) RETURN returnTypeDeclara a função com os parâmetros de entrada e o tipo de retorno.
Declaração de variáveis:
Declara variáveis, inclusive a variável de retorno.
Bloco BEGIN-END com instrução IF:
Verifique se uma condição é verdadeira.
Cada caso é usado para atribuir um valor à mesma variável.
Conversão:¶
DECLARE SECTION : variables with default expression are moved to a common table expression.
A instrução IF/ELSE pode ser tratada usando CASE EXPRESSION dentro de select, permitindo condicionais dentro das consultas.
RETURN é transformada no select final.
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-FDM-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente.
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
UDF do Script Snowflake (SCALAR)¶
Translation reference for Oracle User Defined Functions to Snowflake Scripting UDFs
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
O SnowConvert agora oferece suporte à tradução de funções definidas pelo usuário do Oracle PL/SQL diretamente para Scripts Snowflake UDFs (SnowScript UDFs) quando atendem a critérios específicos.
Snowflake Scripting UDFs are user-defined functions written using Snowflake’s procedural language syntax (Snowscript) within a SQL UDF body. Eles oferecem suporte a variáveis, loops, lógica condicional e tratamento de exceções sem exigir acesso ao banco de dados.
Quando as funções se tornam UDFs do SnowScript¶
O SnowConvert analisa cada função do Oracle e determina automaticamente o destino do Snowflake apropriado. Uma função se torna uma UDF do SnowScript quando contém apenas lógica de procedimento sem operações de acesso a dados.
Amostra de padrões da origem¶
Função de cálculo simples¶
Uma função básica que realiza cálculos sem consultar dados.
Oracle¶
Resultado¶
CALCULATETAX(1000, 15) |
|---|
150 |
Snowflake (SnowScript UDF)¶
Resultado¶
CALCULATETAX(1000, 15) |
|---|
150 |
Função com lógica IF/ELSIF/ELSE¶
Funções que usam instruções condicionais para lógica de negócios.
Oracle¶
Resultado¶
GETSHIPPINGCOST(75, 25) |
|---|
30 |
Snowflake (SnowScript UDF)¶
Resultado¶
GETSHIPPINGCOST(75, 25) |
|---|
30 |
Função com Loop FOR¶
Funções que usam loops para cálculos iterativos.
Oracle¶
Resultado¶
CALCULATECOMPOUNDINTEREST(1000, 5, 3) |
|---|
1157.63 |
Snowflake (SnowScript UDF)¶
Resultado¶
CALCULATECOMPOUNDINTEREST(1000, 5, 3) |
|---|
1157.63 |
Lógica CASE e DECODE¶
Funções usadas por expressões CASE e DECODE para categorização.
Oracle¶
Resultado¶
GETCUSTOMERTIER(3000, 6) |
|---|
GOLD |
Snowflake (SnowScript UDF)¶
Resultado¶
GETCUSTOMERTIER(3000, 6) |
|---|
GOLD |
Select Into variable assignment¶
Functions using simple select into for variable assignment.
Oracle¶
Resultado¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Snowflake (SnowScript UDF)¶
Resultado¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Problemas conhecidos¶
Aviso
SnowConvert AI will not translate UDFs containing the following elements into SnowScripting UDFs, as these features are unsupported in SnowScripting UDFs:
acessar tabelas de banco de dados
Usar cursores
Chamar outras UDFs
conter funções agregadas ou de janela
realizar operações DML (INSERT/UPDATE/DELETE)
retornar conjuntos de resultados
EWIs relacionados¶
SSC-EWI-0067: UDF was transformed to Snowflake procedure, calling procedures inside a query is not supported.
SSC-EWI-0068: a função definida pelo usuário foi transformada em um procedimento Snowflake.
SSC-EWI-0073: Revisão de equivalência funcional pendente.
SSC-FDM-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente.