SnowConvert AI - Oracle - Littéraux¶
Les termes littéral et valeur constante sont synonymes et font référence à une valeur de données fixe.\ (Référence linguistique Oracle SQL - Littéraux
Littéral d’intervalle¶
Le littéral d’intervalle n’est pas pris en charge dans le scénario actuel.
Description¶
Les intervalles de Snowflake ne peuvent être utilisés que dans les opérations arithmétiques. Les intervalles utilisés dans tout autre scénario ne sont pas pris en charge.
Exemple de code¶
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;
Problèmes connus¶
Aucun problème n’a été constaté.
Type d’intervalle et type de date¶
L’opération entre le type d’intervalle et le type de date n’est pas prise en charge
Description¶
INTERVAL YEAR TO MONTH et INTERVAL DAY TO SECOND ne sont pas un type de données pris en charge, ils sont transformés en VARCHAR(20). Par conséquent, toutes les opérations arithmétiques entre les types de date et les colonnes de type intervalle originales ne sont pas prises en charge.
De plus, les opérations entre un type d’intervalle et un type de date (dans cet ordre) ne sont pas prises en charge dans Snowflake. et ces opérations utilisent aussi cet EWI.
Exemple de code¶
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;
Recommandations¶
Mettez en œuvre l’UDF pour simuler le comportement d’Oracle.
Extrayez la valeur déjà transformée qui a été stockée dans la colonne pendant la migration, et utilisez-la comme Constante d’intervalle Snowflake lorsque c’est possible.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com
connexesEWIS¶
SSC-EWI-0036 : Type de données converti en un autre type de données.
SSC-EWI-OR0095: L’opération entre le type d’intervalle et le type de date n’est pas prise en charge.
SSC-FDM-OR0042: Le type de date transformé en horodatage a un comportement différent.
Littéraux de texte¶
Description¶
Utilisez la notation littérale de texte pour spécifier des valeurs à chaque fois que
string(chaîne) apparaît dans la syntaxe d’expressions, de conditions, de fonctions SQL et d’instructions SQL dans d’autres parties de cette référence.
[ {N | n} ]
{ '[ c ]...'
| { Q | q } 'quote_delimiter c [ c ]... quote_delimiter'
}
Modèles d’échantillons de sources¶
Chaîne vide (“”)¶
Les chaînes vides sont équivalentes à NULL dans Oracle, donc afin d’imiter le comportement dans Snowflake, les chaînes vides sont converties en NULL ou undefined selon que le littéral est utilisé dans une procédure ou non.
Oracle¶
SELECT UPPER('') FROM DUAL;
Résultat¶
UPPER |
|---|
Snowflake¶
SELECT UPPER(NULL) FROM DUAL;
Résultat¶
UPPER(NULL) |
|---|
Chaîne vide dans les procédures stockées¶
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;
Résultat¶
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;
Résultat¶
COL1 |
COL2 |
|---|---|
hello |
Chaîne vide dans les fonctions intégrées¶
Avertissement
La transformation ne s’applique pas lorsque la chaîne vide est utilisée comme argument des fonctions REPLACE et CONCAT afin de préserver l’équivalence fonctionnelle.
Oracle¶
SELECT REPLACE('Hello world', '', 'l'), CONCAT('A','') FROM DUAL;
Résultat¶
REPLACE(“HELLOWORLD”,””,”L”) |
CONCAT(“A”,””) |
|---|---|
Hello world |
A |
Snowflake¶
SELECT REPLACE('Hello world', '', 'l'), CONCAT('A','') FROM DUAL;
Résultat¶
REPLACE(“HELLO WORLD”, “”, “L”) |
CONCAT(“A”,””) |
|---|---|
Hello world |
A |
Note
Si les chaînes vides sont remplacées par NULL pour ces casses, les résultats des requêtes seront différents.
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
Pas d’EWIs connexes.