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;
Copy
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;
Copy

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;
Copy
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;
Copy

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

  1. [SSC-EWI-0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.

  2. SSC-EWI-OR0095: Operation zwischen Intervalltyp und Datumstyp wird nicht unterstützt.

  3. 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.

(Oracle SQL Language Reference Text literals)

[ {N | n} ]
{ '[ c ]...'
| { Q | q } 'quote_delimiter c [ c ]... quote_delimiter'
}
Copy

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;
Copy
Ergebnis

UPPER(‚‘)

Snowflake
SELECT UPPER(NULL) FROM DUAL;
Copy
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;
Copy
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;
Copy
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;
Copy
Ergebnis

REPLACE(‚HELLOWORLD‘,‘‘,‘L‘)

CONCAT(‚A‘,‘‘)

Hello world

A

Snowflake
SELECT REPLACE('Hello world', '', 'l'), CONCAT('A','') FROM DUAL;
Copy
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.