SnowConvert AI Oracle – SnowConvert AI UDFs personalizados¶
Descrição¶
Algumas funções e funcionalidades internas do Oracle podem não estar disponíveis ou podem se comportar de maneira diferente no Snowflake. Para minimizar essas diferenças, algumas funções são substituídas por UDFs personalizadas do SnowConvert AI.
Esses UDFs são criados automaticamente durante a migração, na pasta UDF Helper, dentro da pasta Output. Há um arquivo por UDF personalizado.
BFILENAME UDF¶
Descrição¶
Essa função usa o nome do diretório e os parâmetros de nome de arquivo do Oracle BFILENAME() como STRING e retorna uma concatenação deles usando \. Como BFILE é convertido para VARCHAR, o resultado de BFILENAME é tratado como texto.
Aviso
O \ deve ser alterado para corresponder ao caractere de concatenação de arquivo do sistema operacional correspondente.
Sobrecargas personalizadas de UDF¶
BFILENAME_UDF(string, string)¶
Concatena o caminho do diretório e o nome do arquivo.
Parâmetros
DIRECTORYNAME: Um
STRINGque representa o caminho do diretório.FILENAME: Um
STRINGque representa o nome do arquivo.
UDF¶
Oracle¶
Resultado¶
COL1 |
|---|
[BFILE:myfile.png] |
Snowflake¶
Resultado¶
COL1 |
|---|
mydirectory\myfile.png |
Problemas conhecidos¶
1. No access to the DBMS_LOB built-in package¶
Como os tipos de dados LOB não são compatíveis com o Snowflake, não há um equivalente para as funções DBMS_LOB e ainda não há soluções alternativas implementadas.
CAST_DATE UDF¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Esse UDF personalizado foi adicionado para evitar exceções de tempo de execução causadas por diferenças de formato ao converter strings para DATE, dentro de procedimentos e funções.
Sobrecargas personalizadas de UDF¶
CAST_DATE_UDF(datestr)¶
Ele cria um DATE a partir de um STRING.
Parâmetros
DATESTR: Um
STRINGque representa umDATEcom um formato específico.
UDF¶
Oracle¶
Resultado¶
COL1 |
|---|
1996-03-20 00:00:00.000 |
Snowflake¶
Resultado¶
COL1 |
|---|
1996-03-20 |
Problemas conhecidos¶
1. Oracle DATE contains TIMESTAMP¶
Leve em consideração que o Oracle DATE contém um TIMESTAMP vazio (00:00:00.000), enquanto o Snowflake DATE não. O SnowConvert AI permite transformar DATE em TIMESTAMP com o sinalizador SysdateAsCurrentTimestamp.
EWIs relacionados¶
SSC-FDM-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente
DATE_TO_JULIANDAYS_UDF¶
Descrição¶
A função DATE_TO_JULIANDAYS_UDF() recebe um DATE e retorna o número de dias desde 1º de janeiro de 4712 BC. Essa função é equivalente a Oracle TO_CHAR(DATE, “J”)
Sobrecargas personalizadas de UDF¶
DATE_TO_JULIANDAYS_UDF(data)¶
Parâmetros
INPUT_DATE: O
DATEda operação.
UDF¶
Exemplo de uso¶
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
DATEADD UDF¶
Descrição¶
Este UDF é usado como modelo para todos os casos em que há uma adição entre um tipo DATE ou TIMESTAMP e um tipo FLOAT.
Sobrecargas personalizadas de UDF¶
DATEADD_UDF(date, float)¶
Parâmetros
FIRST_PARAM: O primeiro
DATEda operação.SECOND_PARAM: O
FLOATa ser adicionado.
UDF¶
DATEADD_UDF(float, date)¶
Parâmetros
FIRST_PARAM: O
FLOATa ser adicionado.SECOND_PARAM: O
DATEda operação.
UDF¶
DATEADD_UDF(timestamp, float)¶
Parâmetros
FIRST_PARAM: O primeiro
TIMESTAMPda operação.SECOND_PARAM: O
FLOATa ser adicionado.
UDF¶
DATEADD_UDF(float, timestamp)¶
Parâmetros
FIRST_PARAM: O
FLOATda operação.SECOND_PARAM: O
TIMESTAMPda operação.
UDF¶
Exemplo de uso¶
Oracle¶
Resultado¶
TO_TIMESTAMP(“03/08/2009,12:47AM”,”DD/MM/YY,HH:MIAM”)+62.40750856543442 |
|---|
2009-10-04 10:33:49.000 |
Snowflake¶
Resultado¶
|PUBLIC.DATEADD_UDF(
TO_TIMESTAMP(“03/08/2009, 12:47 AM”, “DD/MM/YY, HH12:MI AM”), 62.40750856543442) |
|---|
2009-10-04 00:47:00.000 |
Problemas conhecidos¶
1. Differences in time precision¶
Quando há operações entre Dates ou Timestamps e Floats, a hora pode ser diferente da do Oracle. Há um item de ação para corrigir esse problema.
EWIs relacionados¶
Sem EWIs relacionados
DATEDIFF UDF¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Esse UDF é usado como modelo para todos os casos em que há uma subtração entre um DATE, TIMESTAMP e qualquer outro tipo (exceto Intervalos).
Sobrecargas personalizadas de UDF¶
DATEDIFF_UDF(date, date)¶
Parâmetros
FIRST_PARAM: O primeiro
DATEda operação.SECOND_PARAM: O
DATEa ser subtraído.
UDF¶
DATEDIFF_UDF(date, timestamp)¶
Parâmetros
FIRST_PARAM: O primeiro
DATEda operação.SECOND_PARAM: O
TIMESTAMPa ser subtraído.
UDF¶
DATEDIFF_UDF(date, integer)¶
Parâmetros
FIRST_PARAM: O primeiro
DATEda operação.SECOND_PARAM: O
INTEGERa ser subtraído.
UDF¶
DATEDIFF_UDF(timestamp, timestamp)¶
Parâmetros
FIRST_PARAM: O primeiro
TIMESTAMPda operação.SECOND_PARAM: O
TIMESTAMPa ser subtraído.
UDF¶
DATEDIFF_UDF(timestamp, date)¶
Parâmetros
FIRST_PARAM: O primeiro
TIMESTAMPda operação.SECOND_PARAM: O
DATEa ser subtraído.
UDF¶
DATEDIFF_UDF(timestamp, number)¶
Parâmetros
FIRST_PARAM: O primeiro
TIMESTAMPda operação.SECOND_PARAM: O
NUMBERa ser subtraído.
UDF¶
Exemplo de uso¶
Nota
O desconhecido é uma coluna cujo tipo não pôde ser resolvido, podendo ser um carimbo de data/hora, inteiro de data ou número.
Nota
--disableDateAsTimestamp
Sinalizador para indicar se SYSDATE deve ser transformado em CURRENT_DATE ou CURRENT_TIMESTAMP. Isso também afetará todas as colunas DATE que serão transformadas em TIMESTAMP.
Oracle¶
Snowflake¶
Problemas conhecidos¶
1. Functional differences for timestamps¶
Às vezes, o valor do Snowflake retornado pelo UDF pode ser diferente do valor do Oracle devido ao horário. Considere o seguinte exemplo
Oracle¶
Resultado¶
ASTIMESTAMP-UNKNOWN |
|---|
4417 23:0:0.0 |
Snowflake¶
Resultado¶
PUBLIC.DATEDIFF_UDF( ASTIMESTAMP, UNKNOWN) |
|---|
4418 |
EWIs relacionados¶
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-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente.
JSON_VALUE UDF¶
Referência de tradução para converter a função Oracle JSON_VALUE para Snowflake
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
De acordo com a documentação da Oracle, essa função usa a expressão de caminho SQL/JSON para solicitar informações sobre uma parte de uma instância JSON. O valor retornado é sempre um valor escalar, caso contrário, a função retorna NULL por padrão.
O JSON_VALUE_UDF é uma implementação do Snowflake da especificação JSONPath que usa uma versão modificada da implementação JavaScript original desenvolvida por Stefan Goessner.
Amostra de padrões da origem¶
Dados de configuração¶
Execute essas consultas para executar consultas na seção Padrões de JSON_VALUE.
Oracle¶
Snowflake¶
Padrões de JSON_VALUE¶
Oracle¶
Resultados¶
Caminho JSON |
Resultado da consulta |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake¶
Resultados¶
Caminho JSON |
Resultado da consulta |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
`SSC_CUSTOM_ERRORNO |
|
|
|
`SSC_CUSTOM_ERRORNO |
|
|
|
|
|
|
|
|
|
|
|
|
|
NOT SUPPORTED |
|
NOT SUPPORTED |
Problemas conhecidos¶
1. Returning Type Clause is not fully supported¶
Agora, os únicos tipos compatíveis ao converter a funcionalidade da cláusula RETURNING TYPE são VARCHAR2, CLOB e NUMBER.
Para todos os outros tipos compatíveis com a função original JSON_VALUE, a função JSON_VALUE_UDF se comportará como se nenhuma cláusula RETURNING TYPE tivesse sido especificada.
Tipos não suportados:
DATETIMESTAMP [WITH TIME ZONE]SDO_GEOMETRYCUSTOM TYPE
2. ON MISMATCH Clause is not supported¶
Agora, a cláusula ON MISMATCH não é suportada e, em seu lugar, é colocado um aviso EWI. Assim, o código convertido se comportará como se nenhuma cláusula ON MISMATCH tivesse sido especificada originalmente.
3. Complex filters are not supported¶
Filtros complexos com mais de uma expressão retornarão nulo, pois não são suportados.
Por exemplo, com os mesmos dados de antes, este caminho JSON $.store.book[*]?(@.category == "reference").title é compatível e retornará 'Sayings of the Century'.
No entanto, $.store.book[*]?(@.category == "reference" && @.price < 10).title retornará null, pois mais de uma expressão é usada no filtro.
EWIs relacionados¶
SSC-EWI-0021: Não compatível no Snowflake.
JULIAN TO GREGORIAN DATE UDF¶
Descrição¶
Essa função definida pelo usuário (UDF) é usada para transformar ou converter o formato de data juliana em um formato de data gregoriana. As datas julianas podem ser recebidas em três formatos diferentes, como JD Edwards World, astronômico ou formato comum.
Sobrecargas personalizadas de UDF¶
JULIAN_TO_GREGORIAN_DATE_UDF(julianDate, formatSelected)¶
Ele retorna uma cadeia de caracteres com o formato de data gregoriana YYYY-MM-DD.
Parâmetros:¶
JulianDate: A data juliana a ser convertida. Pode ser CYYDDD (onde C é o século) ou YYYYDDD.
formatSelected: Representa o formato no qual a data juliana deve ser processada. Além disso, ele é um CHAR e pode aceitar os seguintes formatos:
Formato disponível |
Representação de letras em CHAR |
Descrição |
|---|---|---|
Astronomia padronizada |
“J” |
É o formato padrão. A conversão é baseada na expectativa de conversão do Departamento de Aplicações Astronômicas dos US. O formato da data juliana para isso é YYYYDDD. |
JD Edwards World |
“E” |
A data juliana esperada a ser recebida neste caso deve ser CYYDDD (onde C representa o século e é operacionalizado para ser adicionado 19 ao número correspondente). |
Datas ordinais |
“R” |
As datas ordinais são um conjunto de números que representam uma data concisa. O formato é YYYYDDD e pode ser facilmente lido, porque a parte do ano não é imutável. |
UDF¶
Exemplo de uso¶
Oracle¶
Resultado¶
TO_DATE(“2020001”, “J”) |
|---|
18-JUN-18 |
Resultado formatado¶
TO_CHAR(TO_DATE(“2020001”, “J”), “YYYY-MON-DD”) |
|---|
0818-JUN-18 |
Note: The date must be formatted to visualize all digits of the year.
Snowflake¶
Resultado¶
JULIAN_TO_GREGORIAN_DATE_UDF(“2020001”, “J”) |
|---|
«0818-06-18» |
Problemas conhecidos¶
Qualquer outro formato: Se a data juliana for formatada em qualquer outro formato não suportado, haverá diferenças na saída.
Os intervalos de datas de B.C. podem representar inconsistências devido a funções não suportadas do Snowflake para datas.
EWIs relacionados¶
Sem EWIs relacionados
MONTHS BETWEEN UDF [DEPRECATED]¶
Perigo
Este UDF foi descontinuado. A transformação atual para Oracle MONTHS_BETWEEN() é Snowflake MONTHS_BETWEEN().
Descrição¶
MONTHS_BETWEENretorna o número de meses entre as datasdate1edate2. (Referência da linguagem Oracle MONTHS_BETWEEN SQL)
As funções Oracle MONTHS_BETWEEN e Snowflake MONTHS_BETWEEN têm algumas diferenças funcionais. Para minimizar essas diferenças e replicar melhor a função Oracle MONTHS_BETWEEN, adicionamos um UDF personalizado.
Sobrecargas personalizadas de UDF¶
MONTHS_BETWEEN_UDF(timestamp_ltz, timestamp_ltz)¶
Parâmetros
FIRST_DATE: O primeiro
TIMESTAMP_LTZda operação.SECOND_DATE: O segundo
TIMESTAMP_LTZda operação.
UDF¶
Oracle¶
Resultado¶
MONTHS_BETWEEN(“2000-03-2022:01:11”,”1996-03-2010:01:11”) |
MONTHS_BETWEEN(“1996-03-2022:01:11”,”2000-03-2010:01:11”) |
MONTHS_BETWEEN(“1982-05-1122:31:19”,”1900-01-2515:21:15”) |
MONTHS_BETWEEN(“1999-12-2501:15:16”,”1900-12-1102:05:16”) |
|---|---|---|---|
48 |
-48 |
987.558021206690561529271206690561529271 |
1188.450492831541218637992831541218637993 |
Snowflake¶
Resultado¶
MONTHS_BETWEEN_UDF(“2000-03-20 22:01:11”, “1996-03-20 10:01:11”) |
MONTHS_BETWEEN_UDF(“1996-03-20 22:01:11”, “2000-03-20 10:01:11”) |
MONTHS_BETWEEN_UDF(“1982-05-11 22:31:19”, “1900-01-25 15:21:15”) |
MONTHS_BETWEEN_UDF(“1999-12-25 01:15:16”, “1900-12-11 02:05:16”) |
|---|---|---|---|
48.000000 |
-48.000000 |
987.558024 |
1188.450497 |
Problemas conhecidos¶
1. Precision may differ from Oracle¶
Alguns resultados podem diferir no número de dígitos decimais.
EWIs relacionados¶
Sem EWIs relacionados.
REGEXP LIKE UDF¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
REGEXP_LIKErealiza a correspondência de expressões regulares. Essa condição avalia as cadeias de caracteres usando caracteres definidos pelo conjunto de caracteres de entrada. (Condição REGEXP_LIKE da referência de linguagem Oracle)
A condição do Oracle REGEXP_LIKE e do Snowflake REGEXP_LIKE tem algumas diferenças funcionais. Para minimizar essas diferenças e replicar melhor a função do Oracle REGEXP_LIKE, adicionamos um UDF personalizado. A ideia principal é escapar o símbolo de barra invertida da expressão regular onde ele é necessário. Estes são os caracteres especiais que precisam ser escapados quando vêm com uma barra invertida: 'd', 'D', 'w', 'W', 's', 'S', 'A', 'Z', 'n'. Além disso, a expressão de referência inversa (corresponde ao mesmo texto que foi correspondido mais recentemente pelo grupo de captura «number specified») precisa ser escapada.
Sobrecargas personalizadas de UDF¶
REGEXP_LIKE_UDF(string, string)¶
Parâmetros¶
COL: é a expressão de caractere que serve como valor de pesquisa.
PATTERN: é a expressão regular.
UDF¶
Oracle¶
Snowflake¶
REGEXP_LIKE_UDF(string, string, string)¶
Parâmetros¶
COL: é a expressão de caractere que serve como valor de pesquisa.
PATTERN: é a expressão regular.
MATCHPARAM: é uma expressão de caractere que permite alterar o comportamento de correspondência padrão da condição. Na tabela a seguir, há os caracteres Oracle com sua descrição e seu equivalente no UDF.
Parâmetro de correspondência |
Descrição |
Equivalente a UDF |
|---|---|---|
“i” |
Especifica a correspondência que não diferencia maiúsculas e minúsculas, mesmo que o agrupamento determinado da condição diferencie maiúsculas e minúsculas. |
“i” |
“c” |
Especifica a correspondência com distinção entre maiúsculas e minúsculas e com acento, mesmo que o agrupamento determinado da condição não diferencie maiúsculas e minúsculas ou acentos. |
Não tem um equivalente. Ele está sendo removido do parâmetro. |
“n” |
Permite que o ponto (.), que é o caractere curinga que corresponde a qualquer caractere, corresponda ao caractere de nova linha. Se você omitir esse parâmetro, o ponto não corresponderá ao caractere de nova linha. |
“s” |
“m” |
Trata a cadeia de caracteres de origem como várias linhas. Interpretações da Oracle |
“m” |
“x” |
Ignora os caracteres do espaço em branco. Por padrão, os caracteres do espaço em branco correspondem a si mesmos. |
Não tem um equivalente. Ele está sendo removido do parâmetro. |
UDF¶
Oracle¶
Snowflake¶
Problemas conhecidos¶
1. O parâmetro UDF correspondência pode não se comportar como esperado¶
Como todos os caracteres disponíveis no parâmetro de correspondência do Oracle não têm seu equivalente na função definida pelo usuário, o resultado da consulta pode ter algumas diferenças funcionais em comparação com o Oracle.
2. UDF pattern parameter does not allow only “\” as a regular expression¶
Se, como parâmetro de padrão, a expressão regular usada for apenas “\”, será lançada uma exceção como esta: JavaScript execution error: Uncaught SyntaxError: Invalid regular expression: //: \ no final do padrão em REGEXP_LIKE_UDF em “return COL.match(new RegExp(PATTERN));” position 17 stackstrace: REGEXP_LIKE_UDF
TIMESTAMP DIFF UDF¶
Descrição¶
Snowflake does not support the addition operation between TIMESTAMP data types with the - operand. To replicate this functionality, we have added a custom UDF.
Sobrecargas personalizadas de UDF¶
TIMESTAMP_DIFF_UDF(timestamp, timestamp)¶
Parâmetros
LEFT_TS: O primeiro
TIMESTAMPda operação.RIGHT_TS: O
TIMESTAMPa ser adicionado.
UDF¶
Oracle¶
Resultado¶
COL1-COL2 |
|---|
1461 12:0:0.0 |
-1460 12:0:0.0 |
30056 7:10:4.0 |
36172 23:10:0.0 |
Snowflake¶
Resultado¶
TIMESTAMP_DIFF_UDF( COL1, COL2) |
|---|
+000001461 12:00:00.00000000 |
-000001460 12:00:00.00000000 |
+000030056 07:10:04.00000000 |
+000036172 23:10:00.00000000 |
Problemas conhecidos¶
1. TIMESTAMP format may differ from Oracle¶
O formato TIMESTAMP pode ser diferente do Oracle; considere a configuração TIMESTAMP_OUTPUT_FORMAT ao trabalhar com tipos de dados TIMESTAMP.
EWIs relacionados¶
Sem EWIs relacionados.
TRUNC (date) UDF¶
Descrição¶
A função
TRUNC(date) retornadatecom a parte da hora do dia truncada na unidade especificada pelo modelo de formatofmt. (Referência da linguagem SQL Oracle TRUNC(date))
As funções Oracle TRUNC e Snowflake TRUNC com argumentos de data têm algumas diferenças funcionais.
TRUNC_UDF será adicionado para lidar com os seguintes casos:
1. O formato não é compatível com o Snowflake.
2. O formato existe no Snowflake, mas funciona de forma diferente.
3. A ferramenta não pode determinar o tipo de dados do primeiro argumento.
4. O formato é fornecido como uma coluna ou expressão e não como um literal.
Sobrecargas personalizadas de UDF¶
TRUNC_UDF(date)¶
Aplica uma conversão DATE explícita ao Timestamp de entrada.
Parâmetros
INPUT: O registro de data e hora com fuso horário (TIMESTAMP_LTZ) que precisa ser truncado.
Aviso
O parâmetro padrão do UDF é TIMESTAMP_LTZ. Talvez seja necessário alterá-lo para TIMESTAMP_TZ ou TIMESTAMP_NTZ para corresponder ao TIMESTAMP padrão usado pelo usuário.
UDF¶
Oracle¶
Resultado¶
Data |
|---|
1996-03-20 00:00:00.000 |
Snowflake¶
Resultado¶
DATE |
|---|
1996-03-20 |
TRUNC_UDF(date, fmt)¶
Cria manualmente uma nova data usando a função DATE_FROM_PARTS(), dependendo da categoria de formato usada.
Parâmetros
DATE_TO_TRUNC: O Timestamp com Time Zone (TIMESTAMP_LTZ) que precisa ser truncado.
DATE_FMT: O formato de data como VARCHAR. Os mesmos formatos que são compatíveis com o Oracle.
Aviso
O parâmetro padrão do UDF é TIMESTAMP_LTZ. Talvez seja necessário alterá-lo para TIMESTAMP_TZ ou TIMESTAMP_NTZ para corresponder ao TIMESTAMP padrão usado pelo usuário.
UDF¶
Cenários de formato TRUNC¶
Aviso
O formato dos resultados depende dos formatos de saída do DateTime configurados para o banco de dados.
1. Natively supported formats¶
Oracle¶
Resultado¶
TRUNC(TO_DATE(“20/04/2022 13:21:10”,”DD/MM/YYYY HH24:MI:SS”),”YYYY”) |
|---|
01-JAN-22 |
01-JAN-22 |
01-JAN-22 |
01-JAN-22 |
01-JAN-22 |
01-APR-22 |
01-APR-22 |
01-APR-22 |
01-APR-22 |
20-APR-22 |
20-APR-22 |
20-APR-22 |
Snowflake¶
Resultado¶
TRUNC(TO_DATE(“20/04/2022 13:21:10”,”DD/MM/YYYY HH24:MI:SS”),”YYYY”) |
|---|
2022-01-01 |
2022-01-01 |
2022-01-01 |
2022-01-01 |
2022-01-01 |
2022-04-01 |
2022-04-01 |
2022-04-01 |
2022-04-01 |
2022-04-20 |
2022-04-20 |
2022-04-20 |
2. Formats mapped to another format¶
Oracle¶
Resultado¶
TRUNC(TO_DATE(“20/04/2022 13:21:10”,”DD/MM/YYYY HH24:MI:SS”)) |
|---|
20-APR-22 |
01-JAN-22 |
01-JAN-22 |
01-APR-22 |
18-APR-22 |
20-APR-22 |
20-APR-22 |
20-APR-22 |
20-APR-22 |
Snowflake¶
Resultado¶
TRUNC(TO_DATE(“20/04/2022 13:21:10”,”DD/MM/YYYY HH24:MI:SS”), “DD”) |
|---|
2022-04-20 |
2022-01-01 |
2022-01-01 |
2022-04-01 |
2022-04-18 |
2022-04-20 |
2022-04-20 |
2022-04-20 |
2022-04-20 |
3. Day formats¶
Oracle¶
Resultado¶
TRUNC(TO_DATE(“20/04/2022 13:21:10”,”DD/MM/YYYY HH24:MI:SS”),”DAY”) |
|---|
17-APR-22 |
17-APR-22 |
17-APR-22 |
Snowflake¶
Resultado¶
TRUNC_UDF(TO_DATE(“20/04/2022 13:21:10”,”DD/MM/YYYY HH24:MI:SS”),”DAY”) |
|---|
2022-04-17 |
2022-04-17 |
2022-04-17 |
4. Unsupported formats¶
Oracle¶
Resultado¶
TRUNC(TO_DATE(“20/04/2022 13:21:10”,”DD/MM/YYYY HH24:MI:SS”),”CC”) |
|---|
01-JAN-01 |
01-JAN-01 |
03-JAN-22 |
03-JAN-22 |
03-JAN-22 |
16-APR-22 |
15-APR-22 |
Snowflake¶
Resultado¶
TRUNC_UDF(TO_DATE(“20/04/2022 13:21:10”,”DD/MM/YYYY HH24:MI:SS”),”CC”) |
|---|
2001-01-01 |
2001-01-01 |
2022-01-03 |
2022-01-03 |
2022-01-03 |
2022-04-16 |
2022-04-15 |
Nota
Quando a função TRUNC é usada com um formato não suportado ou um parâmetro que não pode ser tratado pelo SnowConvert AI. Para evitar qualquer problema, o formato é substituído por um formato válido, ou TRUNC_UDF é adicionado.
Problemas conhecidos¶
1. Oracle DATE contains TIMESTAMP¶
Leve em consideração que o Oracle DATE contém um TIMESTAMP vazio (00:00:00.000), enquanto o Snowflake DATE não o contém.
EWIs relacionados¶
Sem EWIs relacionados.
TRUNC (number) UDF¶
Descrição¶
A função
TRUNC(number) retornan1truncado paran2casas decimais. Sen2for omitido, entãon1é truncado em 0 casas.n2pode ser negativo para truncar (tornar zero)n2dígitos à esquerda do ponto decimal. (Referência da linguagem SQL Oracle TRUNC(number))
TRUNC_UDF para valores numéricos será adicionado para lidar com casos em que a primeira coluna tem um tipo de dados não reconhecido.
Exemplo:
Se a definição de column1 não foi fornecida à ferramenta. Em seguida, o TRUNC_UDF será adicionado e, em tempo de execução, a sobrecarga do TRUNC_UDF tratará o caso se for um tipo numérico ou de data.
Consulte a seção TRUNC (DATE).
As seções a seguir fornecem a prova de que TRUNC_UDF tratará perfeitamente os valores numéricos.
Sobrecargas personalizadas de UDF¶
TRUNC_UDF(n1)¶
It calls Snowflake TRUNC function with the input number. This overload exists to handle the different types of parameter scenarios, in case that information is not available during the migration.
Parâmetros
INPUT: O
NUMBERque precisa ser truncado.
UDF¶
Oracle¶
Resultado¶
TRUNC(1.000001) |
TRUNC(15.79) |
TRUNC(-975.975) |
TRUNC(135.135) |
|---|---|---|---|
1 |
15 |
-975 |
135 |
Snowflake¶
Resultado¶
TRUNC_UDF(1.000001) |
TRUNC_UDF(15.79) |
TRUNC_UDF(-975.975) |
TRUNC_UDF(135.135) |
|---|---|---|---|
1 |
15 |
-975 |
135 |
TRUNC_UDF(n1, n2)¶
It calls Snowflake TRUNC function with the input number and the scale. This overload exists to handle the different types of parameter scenarios, in case that information is not available during the migration.
Parâmetros
INPUT: O
NUMBERque precisa ser truncado.SCALE: Representa o número de dígitos que a saída incluirá após o ponto decimal.
UDF¶
Oracle¶
Resultado¶
TRUNC(1.000001,-2) |
TRUNC(1.000001,-1) |
TRUNC(1.000001,0) |
TRUNC(1.000001,1) |
TRUNC(1.000001,2) |
TRUNC(15.79,-2) |
TRUNC(15.79,-1) |
TRUNC(15.79,0) |
TRUNC(15.79,1) |
TRUNC(15.79,50) |
TRUNC(-9.6,-2) |
TRUNC(-9.6,-1) |
TRUNC(-9.6,0) |
TRUNC(-9.6,1) |
TRUNC(-9.6,2) |
TRUNC(-975.975,-3) |
TRUNC(-975.975,-2) |
TRUNC(-975.975,-1) |
TRUNC(-975.975,0) |
TRUNC(-975.975,1) |
TRUNC(-975.975,2) |
TRUNC(-975.975,3) |
TRUNC(-975.975,5) |
TRUNC(135.135,-10) |
TRUNC(135.135,-2) |
TRUNC(135.135,0) |
TRUNC(135.135,1) |
TRUNC(135.135,2) |
TRUNC(135.135,3) |
TRUNC(135.135,5) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 |
0 |
1 |
1 |
1 |
0 |
10 |
15 |
15.7 |
15.79 |
0 |
0 |
-9 |
-9.6 |
-9.6 |
0 |
-900 |
-970 |
-975 |
-975.9 |
975.97 |
-975.975 |
-975.975 |
0 |
100 |
135 |
135.1 |
135.13 |
135.135 |
135.135 |
Snowflake¶
Resultado¶
TRUNC_UDF ( 1.000001, -2 ) |
TRUNC_UDF ( 1.000001, -1 ) |
TRUNC_UDF ( 1.000001, 0 ) |
TRUNC_UDF ( 1.000001, 1 ) |
TRUNC_UDF ( 1.000001, 2 ) |
TRUNC_UDF ( 15.79, -2) |
TRUNC_UDF ( 15.79, -1) |
TRUNC_UDF ( 15.79, 0) |
TRUNC_UDF ( 15.79, 1 ) |
TRUNC_UDF ( 15.79, 50 ) |
TRUNC_UDF ( -9.6, -2 ) |
TRUNC_UDF ( -9.6, -1 ) |
TRUNC_UDF ( -9.6, 0 ) |
TRUNC_UDF ( -9.6, 1 ) |
TRUNC_UDF ( -9.6, 2 ) |
TRUNC_UDF ( -975.975, -3 ) |
TRUNC_UDF ( -975.975, -2 ) |
TRUNC_UDF ( -975.975, -1 ) |
TRUNC_UDF ( -975.975, 0 ) |
TRUNC_UDF ( -975.975, 1 ) |
TRUNC_UDF ( -975.975, 2 ) |
TRUNC_UDF ( -975.975, 3 ) |
TRUNC_UDF ( -975.975, 5 ) |
TRUNC_UDF ( 135.135, -10 ) |
TRUNC_UDF ( 135.135, -2 ) |
TRUNC_UDF ( 135.135, 0 ) |
TRUNC_UDF ( 135.135, 1 ) |
TRUNC_UDF ( 135.135, 2 ) |
TRUNC_UDF ( 135.135, 3 ) |
TRUNC_UDF ( 135.135, 5 ) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 |
0 |
1 |
1.0 |
1,00 |
0 |
10 |
15 |
15.7 |
15.79 |
0 |
0 |
-9 |
-9.6 |
-9.6 |
0 |
-900 |
-970 |
-975 |
-975.9 |
975.97 |
-975.975 |
-975.975 |
0 |
100 |
135 |
135.1 |
135.13 |
135.135 |
135.135 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.
SnowConvert AI - Oracle - INTERVAL UDFs¶
Código necessário para executar INTERVAL UDFs¶
To run any of the interval UDFs, it is necessary to run the following code before:
DATEADD UDF INTERVAL¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este UDF é usado para resolver operações com intervalos como:
INTERVAL + DATE
INTERVAL + TIMESTAMP
DATE + INTERVAL
DATE + TIMESTAMP
INTERVAL + UNKNOWN
UNKNOWN + INTERVAL
Nota
An UNKNOWN type is a column or expression whose type could not be resolved by Snow Convert, it tends to happen when the DDLs for tables are not included in the migration or when there is an expression or subquery that can return different data types.
Sobrecargas personalizadas de UDF¶
DATEADD_UDF(string, date)¶
Parâmetros
INTERVAL_VALUE: O intervalo
Stringda operação.D: O
DATEonde o intervalo será adicionado.
UDF¶
DATEADD_UDF(date, string)¶
Parâmetros
D: O
DATEonde o intervalo será adicionado.INTERVAL_VALUE: O intervalo
Stringda operação.
UDF¶
DATEADD_UDF(string, timestamp)¶
Parâmetros
INTERVAL_VALUE: O intervalo
Stringda operação.D: O
TIMESTAMPonde o intervalo será adicionado.
UDF¶
DATEADD_UDF(timestamp, string)¶
Parâmetros
D: O
TIMESTAMPonde o intervalo será adicionado.INTERVAL_VALUE: O intervalo
Stringda operação.
UDF¶
Exemplo de uso¶
Nota
--disableDateAsTimestamp
Sinalizador para indicar se SYSDATE deve ser transformado em CURRENT_DATE ou CURRENT_TIMESTAMP. Isso também afetará todas as colunas DATE que serão transformadas em TIMESTAMP.
Oracle¶
Resultados¶
Snowflake¶
Nota
Essa configuração foi usada no Snowflake
Resultados¶
Problemas conhecidos¶
1. INTERVAL + INTERVAL Operation is not supported¶
O Snowflake não é compatível com as operações INTERVAL + INTERVAL.
EWIs relacionados¶
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-OR0095: Operação entre o tipo de intervalo e o tipo de data não suportada.
SSC-FDM-0007: Elemento com dependências ausentes.
SSC-FDM-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente.
DATEDIFF UDF INTERVAL¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este UDF é usado para resolver operações com intervalos como:
INTERVAL - UNKNOWN
UNKNOWN - INTERVAL
DATE - INTERVAL
TIMESTAMP - INTERVAL
Nota
An UNKNOWN type is a column or expression whose type could not be resolved by Snow Convert, it tends to happen when the DDLs for tables are not included in the migration or when there is an expression or subquery that can return different data types.
Sobrecargas personalizadas de UDF¶
DATEADD_DDIF(string, date)¶
Parâmetros
INTERVAL_VALUE: O intervalo
Stringda operação.D: O
DATEonde o intervalo será subtraído.
UDF¶
DATEADD_DIFF(date, string)¶
Parâmetros
D: O
DATEonde o intervalo será subtraído.INTERVAL_VALUE: O intervalo
Stringda operação.
UDF¶
DATEADD_DIFF(string, timestamp)¶
Parâmetros
INTERVAL_VALUE: O intervalo
Stringda operação.D: O
TIMESTAMPonde o intervalo será subtraído.
UDF¶
DATEADD_DIFF(timestamp, string)¶
Parâmetros
D: O
TIMESTAMPonde o intervalo será subtraído.INTERVAL_VALUE: O intervalo
Stringda operação.
UDF¶
Exemplo de uso¶
Nota
--disableDateAsTimestamp
Sinalizador para indicar se SYSDATE deve ser transformado em CURRENT_DATE ou CURRENT_TIMESTAMP. Isso também afetará todas as colunas DATE que serão transformadas em TIMESTAMP.
Oracle¶
Resultado¶
Snowflake¶
Nota
Essa configuração foi usada no Snowflake
Resultado¶
Problemas conhecidos¶
1. INTERVAL - INTERVAL Operation is not supported¶
O Snowflake não é compatível com as operações INTERVAL - INTERVAL.
EWIs relacionados¶
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-OR0095: Operação entre o tipo de intervalo e o tipo de data não suportada.
SSC-FDM-0007: Elemento com dependências ausentes.
SSC-FDM-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente.