SnowConvert AI - Oracle - Literais¶
Os termos literal e valor constante são sinônimos e referem-se a um valor de dados fixo.\ (Literais de referência de linguagem Oracle SQL)
Literal de intervalo¶
Literal de intervalo incompatível com o cenário atual
Descrição¶
Os intervalos do Snowflake só podem ser usados em operações aritméticas. Os intervalos usados em qualquer outro cenário não são compatíveis.
Exemplo de código¶
Oracle¶
SELECT INTERVAL '1-5' YEAR TO MONTH FROM DUAL;
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0107 - INTERVAL LITERAL IS NOT SUPPORTED BY SNOWFLAKE IN THIS SCENARIO ***/!!!
INTERVAL '1-5' YEAR TO MONTH FROM DUAL;
Problemas conhecidos¶
Não foram encontrados problemas.
Tipo de intervalo e tipo de data¶
Operação entre o tipo de intervalo e o tipo de data não suportada
Descrição¶
INTERVAL YEAR TO MONTH e INTERVAL DAY TO SECOND não são tipos de dados compatíveis; eles são transformados em VARCHAR(20). Portanto, todas as operações aritméticas entre tipos de data e as colunas de tipo de intervalo originais são incompatíveis.
Além disso, operações entre um tipo de intervalo e um tipo de data (nesta ordem) não são compatíveis com o Snowflake, e essas operações também usam este EWI.
Exemplo de código¶
Oracle¶
CREATE TABLE table_with_intervals
(
date_col DATE,
time_col TIMESTAMP,
intervalYearToMonth_col INTERVAL YEAR TO MONTH,
intervalDayToSecond_col INTERVAL DAY TO SECOND
);
-- Date + Interval Y to M
SELECT date_col + intervalYearToMonth_col FROM table_with_intervals;
-- Date - Interval D to S
SELECT date_col - intervalDayToSecond_col FROM table_with_intervals;
-- Timestamp + Interval D to S
SELECT time_col + intervalDayToSecond_col FROM table_with_intervals;
-- Timestamp - Interval Y to M
SELECT time_col - intervalYearToMonth_col FROM table_with_intervals;
Snowflake¶
CREATE OR REPLACE TABLE table_with_intervals
(
date_col TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
time_col TIMESTAMP(6),
intervalYearToMonth_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR TO MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!,
intervalDayToSecond_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO SECOND DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
-- Date + Interval Y to M
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col + intervalYearToMonth_col FROM
table_with_intervals;
-- Date - Interval D to S
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col - intervalDayToSecond_col FROM
table_with_intervals;
-- Timestamp + Interval D to S
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col + intervalDayToSecond_col FROM
table_with_intervals;
-- Timestamp - Interval Y to M
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col - intervalYearToMonth_col FROM
table_with_intervals;
Recomendações¶
Implemente a UDF para simular o comportamento do Oracle.
Extraia o valor já transformado que foi armazenado na coluna durante a migração e use-o como uma constante de intervalo do Snowflake quando possível.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
EWIS relacionados¶
SSC-EWI-0036: Tipo de dados convertido em outro tipo de dados.
SSC-EWI-OR0095: Operação entre o tipo de intervalo e o tipo de data não suportada.
SSC-FDM-OR0042: O tipo de data transformado em carimbo de data/hora tem um comportamento diferente.
Literais de texto¶
Descrição¶
Use a notação de literal de texto para especificar valores sempre que
stringaparece na sintaxe de expressões, condições, funções SQL e instruções SQL em outras partes desta referência.
[ {N | n} ]
{ '[ c ]...'
| { Q | q } 'quote_delimiter c [ c ]... quote_delimiter'
}
Amostra de padrões da origem¶
Cadeia de caracteres vazia (“”)¶
As cadeias de caracteres vazias são equivalentes a NULL no Oracle, portanto, para emular o comportamento no Snowflake, as cadeias de caracteres vazias são convertidas em NULL ou indefinido dependendo se o literal é usado dentro de um procedimento ou não.
Oracle¶
SELECT UPPER('') FROM DUAL;
Resultado¶
UPPER(“”) |
|---|
Snowflake¶
SELECT UPPER(NULL) FROM DUAL;
Resultado¶
UPPER(NULL) |
|---|
Cadeia de caracteres vazia em procedimentos armazenados¶
Oracle¶
CREATE TABLE empty_string_table(
col1 VARCHAR(10),
col2 VARCHAR(10));
CREATE OR REPLACE PROCEDURE null_proc AS
var1 INTEGER := '';
var3 INTEGER := null;
var2 VARCHAR(20) := 'hello';
BEGIN
var1 := var1 + 456;
var2 := var2 || var1;
IF var1 IS NULL THEN
INSERT INTO empty_string_table VALUES (var1, var2);
END IF;
END;
CALL null_proc();
SELECT * FROM empty_string_table;
Resultado¶
COL1 |
COL2 |
|---|---|
hello |
Snowflake¶
CREATE OR REPLACE TABLE empty_string_table (
col1 VARCHAR(10),
col2 VARCHAR(10))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}}'
;
CREATE OR REPLACE PROCEDURE null_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 INTEGER := NULL;
var3 INTEGER := null;
var2 VARCHAR(20) := 'hello';
BEGIN
var1 := :var1 + 456;
var2 := NVL(:var2 :: STRING, '') || NVL(:var1 :: STRING, '');
IF (:var1 IS NULL) THEN
INSERT INTO empty_string_table
VALUES (:var1, :var2);
END IF;
END;
$$;
CALL null_proc();
SELECT * FROM
empty_string_table;
Resultado¶
COL1 |
COL2 |
|---|---|
hello |
Cadeia de caracteres vazia em funções internas¶
Aviso
A transformação não se aplica quando a cadeia de caracteres vazia é usada como argumento das funções REPLACE e CONCAT para manter a equivalência funcional.
Oracle¶
SELECT REPLACE('Hello world', '', 'l'), CONCAT('A','') FROM DUAL;
Resultado¶
REPLACE(“HELLOWORLD”,””,”L”) |
CONCAT(“A”,””) |
|---|---|
Hello world |
A |
Snowflake¶
SELECT REPLACE('Hello world', '', 'l'), CONCAT('A','') FROM DUAL;
Resultado¶
REPLACE(“HELLO WORLD”, “”, “L”) |
CONCAT(“A”,””) |
|---|---|
Hello world |
A |
Nota
Se as cadeias de caracteres vazias forem substituídas por NULL para esses casos, os resultados das consultas serão diferentes.
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.