SnowConvert AI – Oracle – Literale¶
Die Begriffe Literal und konstanter Wert sind gleichbedeutend und beziehen sich auf einen festen Datenwert.\ (Oracle SQL-Sprachreferenz – Literale)
Intervall-Literal¶
Intervall-Literal wird im aktuellen Szenario nicht unterstützt
Beschreibung¶
Snowflake-Intervalle können nur bei arithmetischen Operationen verwendet werden. Intervalle, die in einem anderen Szenario verwendet werden, werden nicht unterstützt.
Beispielcode¶
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;
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Intervalltyp und Datumstyp¶
Operation zwischen Intervalltyp und Datumstyp wird nicht unterstützt
Beschreibung¶
INTERVAL YEAR TO MONTH und INTERVAL DAY TO SECOND sind kein unterstützter Datentyp, sie werden in VARCHAR(20) transformiert. Daher werden alle arithmetischen Operationen zwischen Datentypen und den ursprünglichen Interval-Typ-Spalten nicht unterstützt.
Darüber hinaus werden Operationen zwischen einem Intervalltyp und einem Datumstyp (in dieser Reihenfolge) in Snowflake nicht unterstützt. Diese Operationen verwenden ebenfalls diese EWI.
Beispielcode¶
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;
Empfehlungen¶
Implementieren Sie die UDF, um die Oracle-Verhaltensweise zu simulieren.
Extrahieren Sie den bereits umgewandelten Wert, der während der Migration in der Spalte gespeichert wurde, und verwenden Sie ihn nach Möglichkeit als Snowflake Intervallkonstante.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
Zugehörige EWIS¶
[SSC-EWI-0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.
SSC-EWI-OR0095: Operation zwischen Intervalltyp und Datumstyp wird nicht unterstützt.
SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf.
Textliterale¶
Beschreibung¶
Verwenden Sie die Notation für das Textliteral, um immer Werte anzugeben, wenn
string(Zeichenfolge) in der Syntax von Ausdrücken, Bedingungen, SQL-Funktionen und SQL-Anweisungen in anderen Teilen dieser Referenz angezeigt wird.
[ {N | n} ]
{ '[ c ]...'
| { Q | q } 'quote_delimiter c [ c ]... quote_delimiter'
}
Beispielhafte Quellcode-Muster¶
Leere Zeichenfolge (‚‘)¶
Die leeren Zeichenfolgen sind gleichbedeutend mit NULL in Oracle. Um das Verhalten in Snowflake zu emulieren, werden die leeren Zeichenfolgen in NULL oder undefined konvertiert, je nachdem, ob das Literal innerhalb einer Prozedur verwendet wird oder nicht.
Oracle¶
SELECT UPPER('') FROM DUAL;
Ergebnis¶
UPPER(‚‘) |
|---|
Snowflake¶
SELECT UPPER(NULL) FROM DUAL;
Ergebnis¶
UPPER(NULL) |
|---|
Leere Zeichenfolge in gespeicherten Prozeduren¶
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;
Ergebnis¶
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;
Ergebnis¶
COL1 |
COL2 |
|---|---|
hello |
Leere Zeichenfolge in integrierten Funktionen¶
Warnung
Die Transformation gilt nicht, wenn die leere Zeichenfolge als Argument der REPLACE- und CONCAT-Funktionen verwendet wird, um die funktionale Äquivalenz beizubehalten.
Oracle¶
SELECT REPLACE('Hello world', '', 'l'), CONCAT('A','') FROM DUAL;
Ergebnis¶
REPLACE(‚HELLOWORLD‘,‘‘,‘L‘) |
CONCAT(‚A‘,‘‘) |
|---|---|
Hello world |
A |
Snowflake¶
SELECT REPLACE('Hello world', '', 'l'), CONCAT('A','') FROM DUAL;
Ergebnis¶
REPLACE(‚HELLO WORLD‘, ‚‘, ‚L‘) |
CONCAT(‚A‘,‘‘) |
|---|---|
Hello world |
A |
Bemerkung
Wenn die leeren Zeichenfolgen in diesen Fällen durch NULL ersetzt werden, sehen die Ergebnisse der Abfragen anders aus.
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.