SnowConvert AI – Oracle – Integrierte Oracle-Datentypen

Erweiterte Datentypen

Beschreibung

Ab der Oracle-Datenbank 12_c_ können Sie eine maximale Größe von 32767 Bytes für die Datentypen VARCHAR2, NVARCHAR2 und RAW angeben. Sie können steuern, ob Ihre Datenbank diese neue maximale Größe unterstützt, indem Sie den Initialisierungsparameter MAX_STRING_SIZE setzen.

Ein VARCHAR2- oder NVARCHAR2-Datentyp mit einer deklarierten Größe von mehr als 4000 Bytes oder ein RAW- Datentyp mit einer deklarierten Größe von mehr als 2000 Bytes ist ein erweiterter Datentyp ****. (Oracle SQL Language Reference Extended Data Type).

Oracle erlaubt es, die maximale Zeichenfolgengröße der Datenbank von STANDARD auf EXTENDED zu erhöhen. Snowflake enthält jedoch keine vergleichbare Option für diese Funktion.

Daher werden die erweiterten Datentypen VARCHAR2, NVARCHAR2 und RAW in Snowflake nicht unterstützt und werden einfach als reguläre VARCHAR2-, NVARCHAR2- und RAW-Datentypen transformiert. Weitere Informationen finden Sie unter Zeichendatentypen und [RAW-Datentypen](# raw-and-long-raw-data-types).

Bekannte Probleme

1. MAX STRING SIZE not recognized

ALTER SYSTEM SET MAX_STRING_SIZE='EXTENDED';

Wird von SnowConvert nicht geparst.

JSON-Datentyp

Beschreibung

Die Oracle-Datenbank unterstützt JSON nativ mit relationalen Datenbank-Features, einschließlich Transaktionen, Indizierung, deklarative Abfragen und Ansichten. Im Gegensatz zu relationalen Daten können JSON Daten in der Datenbank gespeichert, indiziert und abgefragt werden, ohne dass ein Schema, das die Daten definiert, erforderlich ist. (Oracle SQL Language Reference JSON Data Type).

Die JSON-Datentypen werden in VARIANT umgewandelt, um die Verhaltensweise von Oracle zu emulieren.

JSON
Copy

Beispielhafte Quellcode-Muster

JSON-Datentyp als Spalte in Create Table

Oracle
CREATE TABLE jsontable (
	json_column JSON
);

INSERT INTO jsontable VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable VALUES('{"stringdata": "this is a text","number": 1,"numberNeg": -1,"booleanT": true,"booleanGF": false,"nullvalue": null,"object": {"1": 1,"2": 2},"array": [1, 2, 3]}');
INSERT INTO jsontable VALUES(JSON('{"id": 4}'));
 
SELECT  * FROM jsontable;
Copy
Ergebnis

COL1

{„id“:1,“content“:“json content“}

{„stringdata“:“this is a text“,“number“:1,“numberNeg“:-1,“booleanT“:true,“booleanGF“:false,“nullvalue“:null,“object“:{„1“:1,“2“:2},“array“:[1,2,3]}

{„id“:4}

Snowflake
CREATE OR REPLACE TABLE jsontable (
	json_column VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO jsontable
VALUES('{"id": 1, "content":"json content"}');

INSERT INTO jsontable
VALUES('{"stringdata": "this is a text","number": 1,"numberNeg": -1,"booleanT": true,"booleanGF": false,"nullvalue": null,"object": {"1": 1,"2": 2},"array": [1, 2, 3]}');

INSERT INTO jsontable
VALUES(JSON('{"id": 4}') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'JSON' NODE ***/!!!);

SELECT  * FROM
	jsontable;
Copy

Warnung

JSON-Dateneinfügungen werden nicht korrekt verarbeitet. Prüfen Sie den Abschnitt Empfehlungen für Problemumgehungen.

Bekannte Probleme

1. JSON-Dateneinfügungen

JSON-Dateneinfügungen werden von SnowConvert nicht korrekt verarbeitet.

2. Bearbeitung von JSON-Objekten

Die Verwendungen von JSON-Objekten (Spalten, Variablen oder Parameter) werden von SnowConvert AI nicht korrekt konvertiert. Prüfen Sie den Abschnitt Empfehlungen für Problemumgehungen.

Empfehlungen

1. JSON Data Type translation workaround

JSON-Datentyp wird in VARIANT übersetzt, so dass die Informationen mit der Snowflake-Funktion PARSE_JSON formatiert werden können. Mit diesem Ansatz können Sie die Daten von JSON in Snowflake mit einer ähnlichen Syntax wie in Oracle speichern, abfragen und bedienen.

Oracle
CREATE TABLE jsontable (
	json_column JSON
);

INSERT INTO jsontable VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable VALUES('{"id": 2, "content": {"header": "header text one", "content": "content text one"}}');
INSERT INTO jsontable VALUES('{"id": 3, "content": {"header": "header tex two", "content": "content text two"}}');

SELECT * FROM jsontable;
SELECT 'ID: ' || jt.json_column.id, 'HEADER: ' || UPPER(jt.json_column.content.header) FROM jsontable jt;
Copy
Ergebnis 1

JSON_SERIALIZE(JSON_COLUMN)

{„id“:1,“content“:“json content“}

{„id“:2,“content“:{„header“:“header text one“,“content“:“content text one“}}

{„id“:3,“content“:{„header“:“header tex two“,“content“:“content text two“}}

Ergebnis 2

‚ID:‘ JT.JSON_COLUMN.ID

‚HEADER:‘ UPPER(JT.JSON_COLUMN.CONTENT.HEADER)

ID: 1

HEADER:

ID: 2

HEADER: „HEADER TEXT ONE“

ID: 3

HEADER: „HEADER TEX TWO“

Snowflake
CREATE OR REPLACE TABLE jsontable (
	json_column VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO jsontable
VALUES('{"id": 1, "content":"json content"}');

INSERT INTO jsontable
VALUES('{"id": 2, "content": {"header": "header text one", "content": "content text one"}}');

INSERT INTO jsontable
VALUES('{"id": 3, "content": {"header": "header tex two", "content": "content text two"}}');

SELECT * FROM
	jsontable;

SELECT 'ID: ' || NVL(jt.json_column.id :: STRING, ''), 'HEADER: ' || NVL(UPPER(jt.json_column.content.header) :: STRING, '') FROM
	jsontable jt;
Copy
Ergebnis 1

JSON_COLUMN

{ „content“: „json content“, „id“: 1}

{ „content“: { „content“: „content text one“, „header“: „header text one“ }, „id“: 2}

{ „content“: { „content“: „content text two“, „header“: „header tex two“ }, „id“: 3}

Ergebnis 2

‚ID: ‚ JT.JSON_COLUMN:ID

‚HEADER: ‚ UPPER(JT.JSON_COLUMN:CONTENT:HEADER)

ID: 1

ID: 2

HEADER: HEADER TEXT ONE

ID: 3

HEADER: HEADER TEX TWO

Bemerkung

Sie müssen SELECT als INSERT INTO Argument anstelle der VALUES Klausel verwenden, um die PARSE_JSON Funktion zu nutzen.

Bemerkung

Verwenden Sie den Operator ‚:‘ anstelle des Operators ‚.‘, um auf die Objekteigenschaften von JSON zuzugreifen. Er ermöglicht mehrere Verschachtelungsebenen in beiden Engines.

Zugehörige EWIs

  1. SSC-EWI-0073: Überprüfung auf gleichwertige Funktion ausstehend.

LONG-Datentyp

LONG-Spalten speichern Zeichenfolgen variabler Länge mit bis zu 2 Gigabyte -1 oder 231-1 Byte. LONG-Spalten haben viele der Eigenschaften von VARCHAR2-Spalten. Sie können LONG Spalten verwenden, um lange Textzeichenfolgen zu speichern. Die Länge der Werte von LONG kann durch den auf Ihrem Computer verfügbaren Speicher begrenzt sein. (Oracle SQL Language Reference Long Data Type)

LONG
Copy

Beispielhafte Quellcode-Muster

Long in Create Table

Oracle
CREATE TABLE long_table
( 
     id 	  NUMBER,
     long_column  LONG
);
     
 INSERT INTO long_table VALUES (1, 'this is a text');
Copy
Snowflake
CREATE OR REPLACE TABLE long_table
 (
      id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
      long_column VARCHAR
 )
 COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
 ;

 INSERT INTO long_table
 VALUES (1, 'this is a text');
Copy

Abrufen von Daten aus einer Long-Spalte

Oracle
SELECT long_column FROM long_table;
Copy
Ergebnis

LONG_COLUMN

this is a text

Snowflake
SELECT long_column FROM
long_table;
Copy
Ergebnis

LONG_COLUMN

this is a text

Bekannte Probleme

1. The max length of long (Oracle) and varchar (Snowflake) are different

Laut Oracle-Dokumentation kann eine Long-Spalte bis zu 2 Gigabyte an Daten speichern, aber Snowflake Varchar ist auf 16 MB begrenzt.

2. Cast of Long column

Der Datentyp Long kann nur in den Datentyp CLOB umgewandelt werden, und die einzige Möglichkeit, dies zu erreichen, ist die Funktion [TO_LOB ](https://docs.oracle.com/en/database/oracle/oracle-database/21/SQLrf/TO_LOB. html#GUID-35810313-029E-4CB8-8C27-DF432FA3C253). Diese Funktion funktioniert nur, wenn sie in der Auswahlliste einer Unterabfrage in einer INSERT-Anweisung verwendet wird. Betrachten Sie das folgende Beispiel

Oracle
CREATE TABLE target_table (col CLOB);

INSERT INTO target_table (SELECT TO_LOB(long_column) FROM long_table);
Copy

Warnung

Wenn der Datentyp der Zieltabellenspalte von CLOB abweicht, fügt Oracle möglicherweise Nullwerte ein oder zeigt beim Versuch, die Daten einzufügen, einen Fehler an.

Zugehörige EWIs

  1. SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.

Datentypen RAW und LONG RAW

Beschreibung

Die Datentypen RAW und LONG RAW speichern Daten, die von der Oracle-Datenbank beim Verschieben von Daten zwischen verschiedenen Systemen nicht explizit konvertiert werden sollen. Diese Datentypen sind für binäre Daten oder Byte-Zeichenfolgen gedacht. (Oracle SQL Language Reference Raw and Long Raw Data Type)

{ LONG RAW | RAW (size) }
Copy

Beispielhafte Quellcode-Muster

Raw und Long Raw in Create Table

Oracle
CREATE TABLE raw_table
(    
     id INTEGER,
     raw_column RAW(2000),
     long_raw_column LONG RAW
);
  
INSERT  INTO raw_table values(1, 'FF00FF00FF', 'FF00FF00FFAABAABABABABA917843210984237123ABABABABAABBAAABBACDFFD');
INSERT  INTO raw_table values(2, 'AAAAAAAAAA', 'ABABABABABABABABABABABABABABABAbABAbABAABABAAABABABABABABABABABABA');
--Insert with largest string posible (2000 HEX characters) 
INSERT INTO raw_table VALUES (3, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
Copy
Snowflake CREATE OR REPLACE TABLE raw_table
CREATE OR REPLACE TABLE raw_table
     (
          id INTEGER,
          raw_column BINARY,
          long_raw_column BINARY
     )
     COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
     ;

     INSERT  INTO raw_table
     values(1, 'FF00FF00FF', 'FF00FF00FFAABAABABABABA917843210984237123ABABABABAABBAAABBACDFFD');

     INSERT  INTO raw_table
     values(2, 'AAAAAAAAAA', 'ABABABABABABABABABABABABABABABAbABAbABAABABAAABABABABABABABABABABA');

     --Insert with largest string posible (2000 HEX characters) 
INSERT INTO raw_table
     VALUES (3, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
Copy

Abrufen von Daten aus der Raw- und Long Raw-Spalte

Oracle
SELECT * FROM raw_table ORDER BY id;
Copy
Ergebnis

ID

RAW_COLUMN

LONG_RAW_COLUMN

1

ªº««««© 2 B7 :ºººº«ºª»¬ßý

2

ªªªªª

«««««««««««««««««««ªººªºººººººººº

3

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

Snowflake
SELECT * FROM
raw_table
ORDER BY id;
Copy
Ergebnis

ID

RAW_COLUMN

LONG_RAW_COLUMN

1

ªº««««© 2 B7 :ºººº«ºª»¬ßý

2

ªªªªª

«««««««««««««««««««ªººªºººººººººº

3

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

Keine zugehörigen EWIs.

Numerische Datentypen

Beschreibung

Die numerischen Datentypen von Oracle Database speichern positive und negative Fest- und Gleitkommazahlen, Null, Unendlich und Werte, die das undefinierte Ergebnis einer Operation sind – „not a number“ oder NAN. (Oracle-Sprachreferenz – Numerische Datentypen)

Anmerkungen zu den arithmetischen Operationen

Beachten Sie, dass jede Operation, die mit numerischen Datentypen ausgeführt wird, intern als Zahl gespeichert wird. Je nach durchgeführter Operation kann es außerdem zu Fehlern bei der Speicherung von Zwischenwerten in Snowflake kommen. Weitere Informationen dazu finden Sie im Snowflake-Beitrag zu Zwischenzahlen in Snowflake.

FLOAT-Datentyp

Beschreibung

Der Datentyp FLOAT ist ein Subtyp des Datentyps NUMBER. Er kann mit oder ohne Präzision angegeben werden, die die gleiche Definition wie beiNUMBERhat und von 1 bis 126 reichen kann. Die Skala kann nicht angegeben werden, sondern wird aus den Daten interpretiert. (Oracle Language Reference Float Data Type)

Warnung

Notes on arithmetic operations

Bitte beachten Sie, dass jede Operation, die mit numerischen Datentypen durchgeführt wird, intern als Zahl gespeichert wird. Außerdem kann es je nach der durchgeführten Operation zu einem Fehler kommen, der damit zusammenhängt, wie Zwischenwerte in Snowflake gespeichert werden. Weitere Informationen finden Sie in diesem Beitrag von Snowflake über Zwischenwerte in Snowflake.

Beispielhafte Quellcode-Muster

Bitte beachten Sie die folgende Tabelle und ihre Einfügungen für die folgenden Beispiele:

Datentyp Float in Create Table

Oracle
CREATE TABLE float_data_type_table(
col1 FLOAT,
col2 FLOAT(5),
col3 FLOAT(126)
);

INSERT INTO float_data_type_table (col1) VALUES (100.55555);
INSERT INTO float_data_type_table (col1) VALUES (1.9);
INSERT INTO float_data_type_table (col2) VALUES (1.23);
INSERT INTO float_data_type_table (col2) VALUES (7.89);
INSERT INTO float_data_type_table (col2) VALUES (12.79);
INSERT INTO float_data_type_table (col2) VALUES (123.45);
INSERT INTO float_data_type_table (col3) VALUES (1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.99999999999999999999555555);
Copy
Snowflake
CREATE OR REPLACE TABLE float_data_type_table (
col1 FLOAT,
col2 FLOAT(5),
col3 FLOAT(126)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO float_data_type_table(col1) VALUES (100.55555);

INSERT INTO float_data_type_table(col1) VALUES (1.9);

INSERT INTO float_data_type_table(col2) VALUES (1.23);

INSERT INTO float_data_type_table(col2) VALUES (7.89);

INSERT INTO float_data_type_table(col2) VALUES (12.79);

INSERT INTO float_data_type_table(col2) VALUES (123.45);

INSERT INTO float_data_type_table(col3) VALUES (1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.99999999999999999999555555);
Copy

FLOAT

Es gibt keine Unterschiede zwischen Oracle und Snowflake bezüglich des Datentyps FLOAT ohne Präzision.

Oracle
SELECT col1 FROM float_data_type_table;
Copy
Ergebnis

col1

100.55555

1.9

Snowflake
SELECT col1 FROM
float_data_type_table;
Copy
Ergebnis

col1

100.55555

1.9

FLOAT (p)

Die Ergebnisse der Abfragen sind möglicherweise nicht gleichwertig, wenn die Genauigkeit (p) im DatentypFLOATangegeben ist. Es gibt kleine Rundungsdifferenzen.

Oracle
SELECT col2 FROM float_data_type_table;

SELECT col3 FROM float_data_type_table;
Copy
Ergebnis

col2

1.2

7.9

13

120

col3

—————————————————————————————————-

1111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000

Snowflake
SELECT col2 FROM
float_data_type_table;

SELECT col3 FROM
float_data_type_table;
Copy
Ergebnis

col2

1.23

7.89

12.79

123,45

col3

—————————————————————————————————-

1111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Bekannte Probleme

1. FLOAT data type with precision

Wenn der Datentyp FLOAT eine Genauigkeit hat, können die Abfrageergebnisse kleine Rundungsdifferenzen aufweisen.

Zugehörige EWIs

Keine zugehörigen EWIs.

NUMBER-Datentyp

Beschreibung

Der Datentyp NUMBER speichert Null sowie positive und negative feste Zahlen mit Absolutwerten von 1,0 x 10-130 bis einschließlich 1,0 x 10126. Wenn Sie einen arithmetischen Ausdruck angeben, dessen Wert einen absoluten Wert größer oder gleich 1,0 x 10126 hat, dann gibt Oracle einen Fehler zurück. Jeder NUMBER Wert benötigt zwischen 1 und 22 Bytes. (Oracle Language Reference Number Data Type).

Der Datentyp NUMBER kann in der folgenden Form angegeben werden NUMBER(p, s) (beide Parameter sind optional) wobei:

  • p ist die Genauigkeit **** oder die maximale Anzahl signifikanter Dezimalstellen, wobei die höchstwertige Stelle die äußerste linke Nicht-Null-Stelle und die niedrigstwertige Stelle die äußerste rechte bekannte Stelle ist. Die Genauigkeit kann von 0 bis 38 reichen.

  • s ist die Skala oder die Anzahl der Ziffern vom Dezimalpunkt bis zur niederwertigsten Stelle. Die Skala kann von -84 bis 127 reichen.

Wenn Sie bei Oracle die Genauigkeit nicht angeben (mit NUMBER oder NUMBER(*)), wird die Spalte mit einer „undefinierten Genauigkeit“ erstellt. Das bedeutet, dass Oracle die Werte dynamisch speichert, so dass jede beliebige Zahl in dieser Spalte gespeichert werden kann. Snowflake unterstützt diese Funktion nicht. Aus diesem Grund werden sie in NUMBER(38, 18) geändert, um eine möglichst große Anzahl von Zahlen zu speichern.

Warnung

Notes on arithmetic operations

Beachten Sie, dass jede Operation, die mit numerischen Datentypen ausgeführt wird, intern als Zahl gespeichert wird. Je nach durchgeführter Operation kann es außerdem zu Fehlern bei der Speicherung von Zwischenwerten in Snowflake kommen. Weitere Informationen dazu finden Sie im Snowflake-Beitrag zu Zwischenzahlen in Snowflake in der Nachricht SSC-FDM-0006 zu funktionaler Äquivalenz.

Beispielhafte Quellcode-Muster

Bitte beachten Sie die folgende Tabelle und ihre Einfügungen für die folgenden Beispiele:

Datentypen in Create Table nummerieren

Oracle
CREATE TABLE number_data_type_table
(
col1 NUMBER,
col2 NUMBER(1),
col3 NUMBER(10, 5),
col4 NUMBER(5, -2),
col5 NUMBER(4, 5)
);

INSERT INTO number_data_type_table(COL1) VALUES(100);
INSERT INTO number_data_type_table(COL2) VALUES(1.99999);
INSERT INTO number_data_type_table(COL3) VALUES(12345.12345);
INSERT INTO number_data_type_table(COL4) VALUES(16430.55555);
INSERT INTO number_data_type_table (COL4) VALUES(17550.55555);
INSERT INTO number_data_type_table(COL5) VALUES(0.00009);
INSERT INTO number_data_type_table(COL5) VALUES(0.000021);
INSERT INTO number_data_type_table(COL5) VALUES(0.012678912);
Copy
Snowflake
CREATE OR REPLACE TABLE number_data_type_table
(
col1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col2 NUMBER(1) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col3 NUMBER(10, 5) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col4 NUMBER(5) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col5 NUMBER(5, 5) /*** SSC-FDM-OR0010 - NUMBER DATATYPE SMALLER PRECISION WAS INCREASED TO MATCH SCALE ***/ /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO number_data_type_table(COL1) VALUES(100);

INSERT INTO number_data_type_table(COL2) VALUES(1.99999);

INSERT INTO number_data_type_table(COL3) VALUES(12345.12345);

INSERT INTO number_data_type_table(COL4) VALUES(16430.55555);

INSERT INTO number_data_type_table(COL4) VALUES(17550.55555);

INSERT INTO number_data_type_table(COL5) VALUES(0.00009);

INSERT INTO number_data_type_table(COL5) VALUES(0.000021);

INSERT INTO number_data_type_table(COL5) VALUES(0.012678912);
Copy

NUMBER (Standardfall)

Wenn die Genauigkeit und die Skala nicht angegeben werden, sind die Standardwerte die maximal verfügbarenNUMBER(38, 127). Die aktuelle Transformation für den Standardfall ist NUMBER(38,19).

Warnung

Wenn Sie in Oracle weder Präzision noch Skala definieren, wird standardmäßig „Undefinierte Präzision und Skala“ angezeigt. Es speichert die Eingabe „wie empfangen“, d. h., es kann sowohl mit Ganzzahl- als auch mit Fließkommazahlen arbeiten. Wir verwenden 38, 18, um zu versuchen, beide Bereiche abzudecken, indem wir 20 für Ganzzahlen verwenden und 18 für Fließkommaziffern übrig lassen.

Oracle
SELECT col1 FROM number_data_type_table;
Copy
Ergebnis

col1

100

Snowflake
SELECT col1 FROM
number_data_type_table;
Copy
Ergebnis

col1

100.0000000000000000000

NUMBER (p)

In diesem Fall gibt die Genauigkeit die Anzahl der Ziffern an, die die Zahl links vom Dezimalpunkt haben kann.

Oracle
SELECT col2 FROM number_data_type_table;
Copy
Ergebnis

col2

2

Snowflake
SELECT col2 FROM
number_data_type_table;
Copy
Ergebnis

col2

2

NUMBER (p, s) p > s

In dem Fall, dass s niedriger ist als p, gibt die Genauigkeit die Anzahl der Stellen an, die die Zahl haben könnte. Die Skala gibt die Anzahl der signifikanten Ziffern rechts vom Dezimalpunkt an, so dass die Anzahl der Ziffern links vom Dezimalpunkt von der angegebenen Skala abhängt.

Oracle
SELECT col3 FROM number_data_type_table;
Copy
Ergebnis

col3

12345.12345

Snowflake
SELECT col3 FROM
number_data_type_table;
Copy
Ergebnis

col3

12345.12345

NUMBER (p, -s)

Eine negative Skala ist die Anzahl der signifikanten Ziffern links vom Dezimalpunkt, bis zur niedrigstwertigen Ziffer, aber ohne diese. Bei der negativen Skala befindet sich die niedrigstwertige Stelle links vom Dezimalpunkt, da die tatsächlichen Daten auf die angegebene Anzahl von Stellen links vom Dezimalpunkt gerundet werden. Die aktuelle Transformation soll die negative Skala entfernen.

Oracle
SELECT col4 FROM number_data_type_table;
Copy
Ergebnis

col4

16400

17600

Snowflake
SELECT col4 FROM
number_data_type_table;
Copy
Ergebnis

col4

16431

17551

NUMBER (p, s) s > p

Wenn der Umfang größer ist als die Genauigkeit, sollten Sie die folgenden Aspekte berücksichtigen:

  • Die einzufügende Zahl darf keine signifikanten Ziffern links vom Dezimalpunkt haben. Nur Null ist verfügbar.

  • Die erste Ziffer rechts vom Dezimalkomma muss Null sein.

  • Die Genauigkeit gibt die maximale Anzahl signifikanter Ziffern rechts vom Dezimalpunkt an.

Oracle
SELECT col5 FROM number_data_type_table;
Copy
Ergebnis

col5

0.00009

0.00002

0.01268

Snowflake
SELECT col5 FROM
number_data_type_table;
Copy
Ergebnis

col5

0.00009

0.00002

0.01268

Bekannte Probleme

1. Scale value exceeds the maximum allowed by Snowflake

Wenn Sie eine Skalierung angeben, die größer als das in Snowflake zulässige Maximum (37) ist, wird diese auf 18 geändert. Weitere Informationen dazu finden Sie in der Dokumentation zu SSC-FDM-0006.

2. Negative scale

Snowflake erlaubt keine negative Skalierung, daher wird diese Skalierung entfernt. Dies könnte zu funktionaler Inäquivalenz führen. Weitere Informationen zu diesem Problem finden Sie in der Dokumentation zu SSC-EWI-0R0092.

Empfehlungen

1. UDF for NUMBER datatype Operations

Es ist möglich, diese Operationen manuell zu migrieren, indem Sie beim Ausführen von arithmetischen Operationen die nächste UDF verwenden, um die genannten Probleme zu vermeiden:

UDF
CREATE OR REPLACE FUNCTION fixed_divide(a NUMBER(38,19), b NUMBER(38,19))
RETURNS NUMBER(38,19)
LANGUAGE JAVA
CALLED ON NULL INPUT
HANDLER='TestFunc.divide'
AS
'
import java.math.BigDecimal;
import java.math.RoundingMode;
class TestFunc {
public static BigDecimal divide(BigDecimal a, BigDecimal b) {
return a.divide(b,RoundingMode.HALF_UP);
}
}';
Copy

Zugehörige EWIs

  1. SSC-EWI-OR0092 Negative Skalierung des Number-Datentyps wurde aus der Ausgabe entfernt.

  2. SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.

  3. SSC-FDM-OR0010 Number-Datentyp mit geringerer Genauigkeit wurde zur Anpassung an die Skalierung erhöht.

Gleitkommazahlen

Beschreibung

Gleitkommazahlen können einen Dezimalpunkt an einer beliebigen Stelle von der ersten bis zur letzten Ziffer oder gar keinen Dezimalpunkt haben. Optional kann nach der Zahl ein Exponent verwendet werden, um den Bereich zu erweitern, z. B. 1,777 e-20. Ein Skalierungswert ist nicht auf Gleitkommazahlen anwendbar, da die Anzahl der Stellen, die nach dem Dezimalpunkt angezeigt werden können, nicht beschränkt ist. Binäre Gleitkommazahlen werden mit binärer Genauigkeit gespeichert (die Ziffern 0 und 1)(Oracle-Sprachreferenz – Gleitkommazahlen)

BINARY_DOUBLE

Beschreibung

BINARY_DOUBLE ist ein 64-Bit-Datentyp mit doppelter Genauigkeit für Gleitkommazahlen. Jeder BINARY_DOUBLE Wert benötigt 8 Bytes. In einer BINARY_DOUBLE Spalte haben Gleitkommazahlen eine binäre Genauigkeit. Die binären Gleitkommazahlen unterstützen die speziellen Werte Unendlich und NaN (not a number). (Oracle Language Reference Binary_Double Data Type)

Es ist möglich, Gleitkommazahlen innerhalb der folgenden Grenzen anzugeben:

  • Maximaler positiver endlicher Wert = 1.79769313486231E+308

  • Minimaler positiver endlicher Wert = 2.22507485850720E-308

Beispielhafte Quellcode-Muster

Bitte beachten Sie die folgende Tabelle und ihre Einfügungen für das folgende Beispiel:

Binäres Double in Create Table

Oracle
CREATE TABLE binary_double_data_type_table
(
COL1 BINARY_DOUBLE
);

INSERT INTO binary_double_data_type_table VALUES(2.22507485850720E-308D);
INSERT INTO binary_double_data_type_table VALUES(1.79769313486231E+308D);
INSERT INTO binary_double_data_type_table VALUES('NaN');
Copy
Snowflake
CREATE OR REPLACE TABLE binary_double_data_type_table
(
COL1 FLOAT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO binary_double_data_type_table
VALUES(2.22507485850720E-308);

INSERT INTO binary_double_data_type_table
VALUES(1.79769313486231E+308);

INSERT INTO binary_double_data_type_table
VALUES('NaN');
Copy

Bemerkung

‚NaN‘ bedeutet _ Keine Zahl _, dieser Wert ist durch denBINARY_DOUBLE Datentyp in Oracle und durch denFLOATDatentyp in Snowflake erlaubt.

BINARY_DOUBLE -> FLOAT

Da der DatentypBINARY_DOUBLEvon Snowflake nicht unterstützt wird, wird er in FLOAT konvertiert.

Oracle
SELECT * FROM binary_double_data_type_table;
Copy
Ergebnis

col1

0

179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

NaN

Snowflake
SELECT * FROM
binary_double_data_type_table;
Copy
Ergebnis

col1

0

179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

NaN

Bekannte Probleme

1. The BINARY_DOUBLE data type is not supported by Snowflake

Der Datentyp BINARY_DOUBLE wird in FLOAT konvertiert, da er von Snowflake nicht unterstützt wird.

Zugehörige EWIs

Keine zugehörigen EWIs.

BINARY_FLOAT

Beschreibung

BINARY_FLOAT ist ein 32-Bit-Datentyp mit einfacher Genauigkeit für Gleitkommazahlen. JederBINARY_FLOATWert benötigt 4 Bytes. In einer BINARY_FLOATSpalte haben Gleitkommazahlen eine binäre Genauigkeit. Die binären Gleitkommazahlen unterstützen die Sonderwerte Unendlich und NaN (not a number). (Oracle Language Reference Binary_Float Data Type)

Es ist möglich, Gleitkommazahlen innerhalb der folgenden Grenzen anzugeben:

  • Maximaler positiver endlicher Wert = 3.40282E+38F

  • Minimaler positiver endlicher Wert = 1.17549E-38F

Beispielhafte Quellcode-Muster

Bitte beachten Sie die folgende Tabelle und ihre Einfügungen für das folgende Beispiel:

Binäres Float in Create Table

Oracle
CREATE TABLE binary_float_data_type_table
(
col1 BINARY_FLOAT
);

INSERT INTO binary_float_data_type_table VALUES(1.17549E-38F);
INSERT INTO binary_float_data_type_table VALUES(3.40282E+38F);
INSERT INTO binary_float_data_type_table VALUES('NaN');
Copy
Snowflake
CREATE OR REPLACE TABLE binary_float_data_type_table
(
col1 FLOAT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO binary_float_data_type_table
VALUES(1.17549E-38);

INSERT INTO binary_float_data_type_table
VALUES(3.40282E+38);

INSERT INTO binary_float_data_type_table
VALUES('NaN');
Copy

Bemerkung

‚NaN‘ bedeutet _ Keine Zahl _, dieser Wert ist durch denBINARY_FLOAT Datentyp in Oracle und durch denFLOATDatentyp in Snowflake erlaubt.

BINARY_FLOAT -> FLOAT

Da der DatentypBINARY_FLOATvon Snowflake nicht unterstützt wird, wird er in FLOAT konvertiert.

Oracle
SELECT * FROM binary_float_data_type_table;
Copy
Ergebnis

col1

0

340282001837565600000000000000000000000

NaN

Snowflake
SELECT * FROM binary_float_data_type_table;
Copy
Ergebnis

col1

0

340282000000000000000000000000000000000

NaN

Bekannte Probleme

1. The BINARY_FLOAT data type is not supported by Snowflake

Der Datentyp BINARY_FLOAT wird in FLOAT konvertiert, da er von Snowflake nicht unterstützt wird.

Zugehörige EWIs

Keine zugehörigen EWIs.

Datentypen für Datum/Uhrzeit und Intervall

Die datetime-Datentypen sind DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE und TIMESTAMP WITH LOCAL TIME ZONE. Werte von datetime-Datentypen werden manchmal auch datetimes genannt. Die interval-Datentypen sind INTERVAL YEAR TO MONTH und INTERVAL DAY TO SECOND. Werte von interval-Datentypen werden manchmal als intervals bezeichnet. (Oracle SQL-Sprachreferenz – Datentypen für Datum/Uhrzeit und Intervall)

DATE-Datentyp

Beschreibung

Der Datumsdatentyp von Oracle speichert sowohl Datums- als auch Zeitinformationen, während der Datumsdatentyp von Snowflake nur Datumsinformationen speichert. (Oracle SQL Language Reference Date Data Type)

Die Standardtransformation DATE von Oracle ist TIMESTAMP in Snowflake. Sie können das Flag disableDateAsTimestamp (SnowConvert AI-Befehlszeilenschnittstelle) hinzufügen oder die Einstellung Transform Date as Timestamp deaktivieren (SnowConvert AI-Desktopanwendung), um den DATE-Typ in TIMESTAMP zu konvertieren. Denken Sie daran, dass DATE in Snowflake nur Datumsinformationen und Oracle Datums- und Zeitinformationen speichert. Wenn Sie den Verlust von Informationen vermeiden möchten, sollten Sie DATE in TIMESTAMP transformieren.

Bemerkung

Wichtiger Unterschied beim Rundungsverhalten: Bei Operationen zwischen Datentypen für Datum/Uhrzeit und Intervallen, die Sekunden beinhalten, rundet Oracle die Sekunden nicht, behält aber die angegebene Genauigkeit bei, während Snowflake die Sekunden auf die nächste ganze Sekunde aufrundet. Dieser Unterschied im Rundungsverhalten kann zu unterschiedlichen Ergebnissen führen.

Beispielhafte Quellcode-Muster

Datum in Create Table

Oracle
CREATE TABLE date_table
(
	date_col date
);

INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Copy
Snowflake ohne –disableDateAsTimestamp-Flag oder mit aktivierter Einstellung „Datum als Zeitstempel umwandeln“
CREATE OR REPLACE TABLE date_table
	(
		date_col TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
	;

	INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Copy
Snowflake mit –disableDateAsTimestamp Flag oder mit deaktivierter Einstellung „Datum als Zeitstempel umwandeln“
CREATE OR REPLACE TABLE date_table
	(
		date_col date
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Copy

Abrufen von Daten aus einer Datumsspalte

Oracle
SELECT date_col FROM date_table;
Copy
Ergebnis

DATE_COL

2010-10-10 00:00:00.000

Snowflake
SELECT date_col FROM
date_table;
Copy
Ergebnis

DATE_COL

2010-10-10 00:00:00.000

Ergebnis mit dem disableDateAsTimestamp-Flag

DATE_COL

2010-10-10

Bekannte Probleme

1. Input and output format may differ between languages

In Snowflake hängen _ DATE_ Eingabe- und Ausgabeformate von den Sitzungsvariablen _ DATE_INPUT_FORMAT_ und _ DATE_OUTPUT_FORMAT_ ab. Einfügungen können fehlschlagen, weil DATE_INPUT_FORMAT den Benutzer dazu zwingt, ein bestimmtes Format zu verwenden, wenn ein Datum per Text hinzugefügt wird. Sie können diese Variablen mit der folgenden Syntax ändern.

ALTER SESSION SET DATE_INPUT_FORMAT = 'YYYY-DD-MM' DATE_OUTPUT_FORMAT = 'DD-MM-YYYY';
Copy

Zugehörige EWIs

  1. SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf

INTERVALDAYTOSECOND-Datentyp

Beschreibung

INTERVAL DAY TO SECOND speichert einen Zeitraum in Form von Tagen, Stunden, Minuten und Sekunden. (Oracle SQL Language Reference INTERVAL DAY TO SECOND Data Type)

Es gibt keine Entsprechung für diesen Datentyp in Snowflake, er wird derzeit in VARCHAR umgewandelt.

INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]
Copy

Beispielhafte Quellcode-Muster

Intervall Tag bis Sekunde in Create Table

Oracle
CREATE TABLE interval_day_to_second_table
(
	interval_day_col1 interval day to second,
	interval_day_col2 interval day(1) to second(4)
);

INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ( INTERVAL '1 2:3:4.56' DAY TO SECOND ); 
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ( INTERVAL '1 2:3:4.56' DAY(1) TO SECOND(4) );
Copy
Snowflake
CREATE OR REPLACE TABLE interval_day_to_second_table
	(
		interval_day_col1 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL day to second DATA TYPE CONVERTED TO VARCHAR ***/!!!,
		interval_day_col2 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL day(1) to second(4) DATA TYPE CONVERTED TO VARCHAR ***/!!!
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ('1d, 2h, 3m, 4s, 56ms');

	INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ('1d, 2h, 3m, 4s, 56ms');
Copy

Der Intervallwert wird in ein unterstütztes Snowflake-Format umgewandelt und dann als Text in die Spalte eingefügt. Da Snowflake Intervall nicht als Datentyp unterstützt, wird er nur bei arithmetischen Operationen unterstützt. Um den Wert zu verwenden, muss er extrahiert und als Intervallkonstante verwendet werden (falls möglich).

Ursprünglicher Oracle-Wert: INTERVAL '1 2:3:4.567' DAY TO SECOND

In der Spalte Snowflake gespeicherter Wert: '1d, 2h, 3m, 4s, 567ms'

Wert als Snowflake Intervall-Konstante: INTERVAL '1d, 2h, 3m, 4s, 567ms'

Abrufen von Daten aus einer Spalte Intervall Tag bis Sekunde

Oracle
SELECT * FROM interval_day_to_second_table;
Copy
Ergebnis

INTERVAL_DAY_COL1

INTERVAL_DAY_COL2

1 2:3:4.567

1 2:3:4.567

Snowflake
SELECT * FROM
interval_day_to_second_table;
Copy
Ergebnis

INTERVAL_DAY_COL1

INTERVAL_DAY_COL2

1d, 2h, 3m, 4s, 56ms

1d, 2h, 3m, 4s, 56ms

Bekannte Probleme

1. Only arithmetic operations are supported

Snowflake-Intervalle haben mehrere Beschränkungen. Es werden nur arithmetische Operationen zwischen DATE oder TIMESTAMP und Intervallkonstanten unterstützt, alle anderen Szenarien werden nicht unterstützt.

Zugehörige EWIs

  1. SSC-EWI-0036: Datentyp, der in einen anderen Datentyp konvertiert wurde.

INTERVALYEARTOMONTH-Datentyp

Beschreibung

INTERVAL YEAR TO MONTH speichert einen Zeitraum unter Verwendung der Felder für Datum und Uhrzeit YEAR und MONTH. Da es in Snowflake keine Entsprechung gibt, wird es in Varchar umgewandelt (Oracle SQL Language Reference INTERVAL YEAR TO MONTH Data Type)

Es gibt keine Entsprechung für diesen Datentyp in Snowflake, er wird derzeit in VARCHAR umgewandelt.

INTERVAL YEAR [(year_precision)] TO MONTH
Copy

Beispielhafte Quellcode-Muster

Intervall Jahr bis Monat in Create Table

Oracle
CREATE TABLE interval_year_to_month_table
(
	interval_year_col1 interval year to month,
	interval_year_col2 interval year(4) to month
);

INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ( INTERVAL '1-2' YEAR TO MONTH ); 
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ( INTERVAL '1000-11' YEAR(4) TO MONTH );
Copy
Snowflake
CREATE OR REPLACE TABLE interval_year_to_month_table
	(
		interval_year_col1 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL year to month DATA TYPE CONVERTED TO VARCHAR ***/!!!,
		interval_year_col2 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL year(4) to month DATA TYPE CONVERTED TO VARCHAR ***/!!!
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ('1y, 2mm');

	INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ('1000y, 11mm');
Copy

Der Intervallwert wird in ein unterstütztes Snowflake-Format umgewandelt und dann als Text in die Spalte eingefügt. Da Snowflake Intervall nicht als Datentyp unterstützt, wird er nur bei arithmetischen Operationen unterstützt. Um den Wert zu verwenden, muss er extrahiert und als Intervallkonstante verwendet werden (falls möglich).

Ursprünglicher Oracle-Wert: INTERVAL '1-2' YEAR TO MONTH

In der Spalte Snowflake gespeicherter Wert: '1y, 2m'

Wert als Snowflake-Intervall-Konstante: INTERVAL '1y, 2m'

Abrufen von Daten aus einer Spalte Intervall Jahr bis Monat

Oracle
SELECT * FROM interval_year_to_month_table;
Copy
Ergebnis

INTERVAL_YEAR_COL1

INTERVAL_YEAR_COL2

1-2

1000-11

Snowflake
SELECT * FROM
interval_year_to_month_table;
Copy
Ergebnis

INTERVAL_YEAR_COL1

INTERVAL_YEAR_COL2

1y, 2m

              |1000y, 11m        |
Copy

Bekannte Probleme

1. Only arithmetic operations are supported

Snowflake-Intervalle haben mehrere Beschränkungen. Es werden nur arithmetische Operationen zwischen DATE oder TIMESTAMP und Intervallkonstanten unterstützt, alle anderen Szenarien werden nicht unterstützt.

Zugehörige EWIs

  • SSC-EWI-0036: Datentyp, der in einen anderen Datentyp konvertiert wurde.

TIMESTAMP-Datentyp

Beschreibung

Der Datentyp TIMESTAMP ist eine Erweiterung des Datentyps DATE. Er speichert das Jahr, den Monat und den Tag des Datentyps DATE sowie die Werte für Stunde, Minute und Sekunde. (Oracle SQL Language Reference Timestamp Data Type)

Die Datentypen Oracle und Snowflake TIMESTAMP haben den gleichen Präzisionsbereich (0-9), aber unterschiedliche Standardwerte. In Oracle ist der Standardpräzisionswert 6 und in Snowflake ist er 9.

Es gibt jedoch einen Unterschied in der Verhaltensweise, wenn ein eingefügter Wert die eingestellte Genauigkeit überschreitet. Oracle rundet die überschüssigen Dezimalstellen auf, während Snowflake die Werte nur abschneidet.

TIMESTAMP [(fractional_seconds_precision)] 
Copy

Beispielhafte Quellcode-Muster

Zeitstempel in Create Table

Oracle
CREATE TABLE timestamp_table
(
	timestamp_col1 TIMESTAMP,
	timestamp_col2 TIMESTAMP(7)
);

INSERT INTO timestamp_table(timestamp_col1, timestamp_col2) VALUES (TIMESTAMP '2010-10-10 12:00:00', TIMESTAMP '2010-10-10 12:00:00');
Copy
Snowflake
CREATE OR REPLACE TABLE timestamp_table
	(
		timestamp_col1 TIMESTAMP(6),
		timestamp_col2 TIMESTAMP(7)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO timestamp_table(timestamp_col1, timestamp_col2) VALUES (TIMESTAMP '2010-10-10 12:00:00', TIMESTAMP '2010-10-10 12:00:00');
Copy

Abrufen von Daten aus einer Zeitstempelspalte

Oracle
SELECT * FROM timestamp_table;
Copy
Ergebnis

TIMESTAMP_COL1

TIMESTAMP_COL2

2010-10-10 12:00:00.000

2010-10-10 12:00:00.000

Snowflake
SELECT * FROM
timestamp_table;
Copy
Ergebnis

TIMESTAMP_COL1

TIMESTAMP_COL2

2010-10-10 12:00:00.000

2010-10-10 12:00:00.000

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

Keine zugehörigen EWIs.

TIMESTAMPWITHLOCALTIMEZONE Datentyp

Beschreibung

Er unterscheidet sich von TIMESTAMP WITH TIME ZONE dadurch, dass die in der Datenbank gespeicherten Daten auf die Zeitzone der Datenbank normalisiert werden und die Zeitzoneninformation nicht als Teil der Spaltendaten gespeichert wird. (Oracle SQL Language Reference Timestamp with Local Time Zone Data Type)

Das Snowflake-Äquivalent ist TIMESTAMP_LTZ.

Weitere Informationen finden Sie auch im Abschnitt TIMESTAMP.

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

Copy

Beispielhafte Quellcode-Muster

Zeitstempel mit Zeitzone in Create Table

Oracle
CREATE TABLE timestamp_with_local_time_zone_table
(
	timestamp_col1 TIMESTAMP(5) WITH LOCAL TIME ZONE
);

INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -08:00');
Copy
Snowflake
CREATE OR REPLACE TABLE timestamp_with_local_time_zone_table
	(
		timestamp_col1 TIMESTAMP_LTZ(5)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');

	INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -08:00');
Copy

Abrufen von Daten aus einer Spalte Zeitstempel mit lokaler Zeitzone

Oracle
SELECT * FROM timestamp_with_local_time_zone_table;
Copy
Ergebnis

TIMESTAMP_COL1

2010-10-10 18:00:00.000

2010-10-10 20:00:00.000

Snowflake
SELECT * FROM
timestamp_with_local_time_zone_table;
Copy
Ergebnis

TIMESTAMP_COL1

2010-10-10 12:00:00.000 -0700

2010-10-10 12:00:00.000 -0700

Bemerkung

Beachten Sie, dass die Ergebnisse in beiden Engines unterschiedlich sind, da jede Datenbank mit einer anderen Zeitzone eingestellt ist. Die Oracle-Zeitzone ist ‚+00:00‘ und die Snowflake-Zeitzone ist „America/Los_Angeles“.

Verwenden Sie die folgende Syntax, um die Standardzeitzone der Datenbank zu ändern:

ALTER account SET timezone = timezone_string;
Copy

Bekannte Probleme

1. Default database timezone

Die Operationen mit dieser Art von Datentyp werden von der Zeitzone der Datenbank beeinflusst, die Ergebnisse können unterschiedlich ausfallen. Sie können die Standardzeitzone mit den folgenden Abfragen überprüfen:

Oracle
SELECT dbtimezone FROM dual;
Copy
Snowflake
SELECT dbtimezone FROM dual;
Copy
2. Oracle Timestamp with local timezone behavior

Wenn Sie Zeitstempel mit lokalen Zeitzonen-Datentypen betreiben, konvertiert Oracle die Zeitstempel in die Standardzeitzone der Datenbank. Um diese Verhaltensweise in Snowflake zu emulieren, sollte der Sitzungsparameter TIMESTAMP_TYPE_MAPPING auf ‚TIMESTAMP_LTZ‘ gesetzt werden.

ALTER SESSION SET TIMESTAMP_TYPE_MAPPING = 'TIMESTAMP_LTZ';
Copy
3. Timestamp formats may be different

Snow Convert führt keine Konvertierung für die Zeichenfolgen im Format Datum/Zeitstempel durch, so dass es bei der Bereitstellung des Codes zu Fehlern kommen kann. Beispiel:

Oracle
INSERT INTO timestamp_with_local_time_zone_table (timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy
Snowflake
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy

Warnung

Die Abfrage schlägt in Snowflake fehl, da das standardmäßige Zeitstempel-Eingabeformat ‚-8:00‘ nicht als gültigen UTC Offset erkennt. Er sollte durch ‚0800‘ oder ‚-08:00‘ ersetzt werden, um das gleiche Ergebnis zu erzielen.

Zugehörige EWIs

Keine zugehörigen EWIs.

TIMESTAMPWITHTIMEZONE-Datentyp

Beschreibung

TIMESTAMP WITH TIME ZONE ist eine Variante von TIMESTAMP, die den Namen einer Region oder einen Zeitzonenoffset in ihrem Wert enthält. Das Snowflake-Äquivalent ist TIMESTAMP_TZ. (Oracle SQL Language Reference Timestamp with Time Zone Data)

Das Snowflake-Äquivalent ist TIMESTAMP_TZ.

Weitere Informationen finden Sie auch im Abschnitt TIMESTAMP.

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

Copy

Beispielhafte Quellcode-Muster

Zeitstempel mit Zeitzone in Create Table

Oracle
CREATE TABLE timestamp_with_time_zone_table
(
	timestamp_col1 TIMESTAMP(5) WITH TIME ZONE
);


INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
Copy
Snowflake
CREATE OR REPLACE TABLE timestamp_with_time_zone_table
	(
		timestamp_col1 TIMESTAMP_TZ(5)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
Copy

Abrufen von Daten aus einer Spalte Zeitstempel mit Zeitzone

Oracle
SELECT * FROM timestamp_with_time_zone_table;
Copy
Ergebnis

TIMESTAMP_COL1

2010-10-10 12:00:00.000 -0600

Snowflake
SELECT * FROM
timestamp_with_time_zone_table;
Copy
Ergebnis

TIMESTAMP_COL1

2010-10-10 12:00:00.000 -0700

Bemerkung

Beachten Sie, dass die Zeitzone in beiden Engines unterschiedlich ist, denn wenn die Zeitzone nicht angegeben wird, wird die Standardzeitzone der Datenbank hinzugefügt.

Verwenden Sie die folgende Syntax, um die Standardzeitzone der Datenbank zu ändern:

ALTER account SET sqtimezone = timezone_string;
Copy

Bekannte Probleme

1. Timestamp formats may be different

Snow Convert führt keine Konvertierung für die Zeichenfolgen im Format Datum/Zeitstempel durch, so dass es bei der Bereitstellung des Codes zu Fehlern kommen kann. Beispiel:

Oracle
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy
Snowflake
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy

Warnung

Die Abfrage schlägt in Snowflake fehl, da das standardmäßige Zeitstempel-Eingabeformat ‚-8:00‘ nicht als gültigen UTC Offset erkennt. Er sollte durch ‚-0800‘ oder ‚-08:00‘ ersetzt werden, um das gleiche Ergebnis zu erhalten.

Zugehörige EWIs

Keine zugehörigen EWIs.

Datetime-Arithmetik

Dieser Inhalt erklärt die aktuelle Transformation für einige arithmetische Operationen zwischen datetime-Typen.

Beschreibung

In Oracle konnten einige arithmetische Operationen zwischen DateTime-Datentypen, wie Addition, Subtraktion, Multiplikation und Division, durchgeführt werden. Derzeit kann SnowConvert AI einige Fälle von Addition und Subtraktion auflösen. Diese Fälle werden im Folgenden erläutert.

Beispielhafte Quellcode-Muster

Dies ist eine Zusammenfassung der aktuellen Transformation für die verschiedenen Kombinationen der Additions- und Subtraktionsoperationen mit Datums-, Zeitstempel-, Zahlen- und unbekannten Typen.

Bemerkung

Beachten Sie die nächste Tabelle für die folgenden Beispiele.

Oracle

CREATE OR REPLACE TABLE TIMES (
AsTimeStamp TIMESTAMP(6),
AsTimestampTwo TIMESTAMP(6),
AsDate TIMESTAMP,
AsDateTwo TIMESTAMP
);

INSERT INTO TIMES
VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
Copy
Snowflake
CREATE OR REPLACE TABLE TIMES (
 AsTimeStamp TIMESTAMP(6),
 AsTimestampTwo TIMESTAMP(6),
 AsDate TIMESTAMP(6),
 AsDateTwo TIMESTAMP(6)
 )
 COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
 ;

 INSERT INTO TIMES
 VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
Copy

Addition

Kombinationsmatrix

Dies ist eine Zusammenfassung, wie der Migrationsdienst die Additionsoperationen für die verschiedenen Kombinationen mit Datums-, Zeitstempel-, Zahlen- und unbekannten Typen auflöst.

Addition

Date

Zeitstempel

Zahl

Intervall

Unbekannt

Float

Datum

INVALID

INVALID

Datum + Intervall-Tag

Datum + Intervall IntervalUnit

DATEADD_UDF

DATEADD_UDF

Zeitstempel

INVALID

INVALID

Zeitstempel + Intervall-Tag

Zeitstempel + Intervall IntervalUnit

DATEADD_UDF

DATEADD_UDF

Zahl

Datum + Intervall-Tag

Zeitstempel + Intervall-Tag

Zahl + Zahl

INVALID

SSC-EWI-OR0036

Zahl + Gleitkomma

Intervall

Datum + Intervall IntervalUnit

Zeitstempel + Intervall IntervalUnit

INVALID

SSC-EWI-OR0036

Unbekannt + Intervall IntervalUnit

INVALID

Unbekannt

DATEADD_UDF

DATEADD_UDF

Unbekannt + Zahl

Unbekannt + Intervall IntervalUnit

SSC-EWI-OR0036

SSC-EWI-OR0036

Gleitkomma

DATEADD_UDF

DATEADD_UDF

Gleitkomma + Zahl

INVALID

SSC-EWI-OR0036

Gleitkomma + Gleitkomma

Bemerkung

Eine Spalte vom unbekannten Typ entsteht dadurch, dass der Migrantsdienst den Datentyp der Spalte nicht ermitteln konnte. Dies kann aus vielen Gründen geschehen. Beispiele: fehlende DDLs in den bearbeiteten Tabellen, Spalten aus Operationen in Ansichten, CTES oder Unterabfragen usw.

Warnung

Standardmäßig migriert Snow Convert Operationen des Typs Datum/Zeitstempel + Intervall in die nativen Snowflake-Operationen, aber in einigen Fällen kann es sinnvoll sein, eine entsprechende UDF zu verwenden. Weitere Details zu dieser UDF finden Sie hier.

Die verschiedenen Pfade, die der Migrationsdienst für die Auflösung der Additionsoperationen verwenden kann, werden unten erläutert:

Ungültig

Bestimmte Kombinationen sind nicht gültig, um Additionsoperationen in Oracle auszuführen:

Oracle
SELECT AsDate + AsDateTwo From TIMES;

SELECT AsDate + AsTimeStamp From TIMES;
Copy
Ergebnis
SQL Error [975] [42000]: ORA-00975: date + date not allowed

SQL Error [30087] [99999]: ORA-30087: Adding two datetime values is not allowed

Copy

Datum + Intervall-Tag

Dies ist die aktuelle Transformation für die Additionsoperation zwischen einem Datumstyp und einer Zahl (und umgekehrt). Beispiel

Oracle
SELECT AsDate + 1 FROM TIMES;

SELECT 1 + AsDate FROM TIMES;
Copy
Ergebnis

ASDATE+1

2021-11-07 00:00:00.000

1+ASDATE

2021-11-07 00:00:00.000

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
 AsDate + 1 FROM
 TIMES;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Number AND unknown ***/!!! 1 + AsDate FROM
 TIMES;
Copy
Ergebnis

ASDATE + INTERVAL ‚1 DAY‘

2021-11-07

Zeitstempel + Intervall-Tag

Dies ist die aktuelle Transformation für die Additionsoperation zwischen einem Zeitstempeltyp und einer Zahl (und umgekehrt). Beispiel

Oracle
SELECT AsTimestamp + 1 FROM TIMES;

SELECT 1 + AsTimestamp FROM TIMES;
Copy
Ergebnis

ASTIMESTAMP+1

2021-11-06 11:00:00.000

1+ASTIMESTAMP

2021-11-06 11:00:00.000

Bemerkung

Hinweis: In Oracle enthalten sowohl die Spalte DATE als auch die Spalte TIMESTAMP eine Zeitkomponente, aber Oracle hat die vom NLS_DATE_FORMAT-Parameter angegebene Formatmaske verwendet , um zu entscheiden, wie das Datum implizit in eine Zeichenfolge konvertiert werden soll. Deshalb kann das Ergebnis bei der Durchführung bestimmter Operationen zwischen TIMESTAMP und Intervals als DATE angezeigt werden, wodurch die Zeitkomponente ausgeblendet wird, es sei denn, der Parameter NLS_DATE_FORMAT wird geändert.

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
 AsTimestamp + 1 FROM
 TIMES;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Number AND unknown ***/!!! 1 + AsTimestamp FROM
 TIMES;
Copy
Ergebnis

ASTIMESTAMP + INTERVAL ‚1 DAY‘

2021-11-06 11:00:00.000

DATEADD_UDF

Für die Fälle, in denen es eine Additionsoperation zwischen einem Datums- oder Zeitstempeltyp und einem unbekannten Typ gibt, wird eine benutzerdefinierte Funktion (UDF) hinzugefügt. Die aktuelle UDF-Implementierung finden Sie hier. Die UDF befindet sich im UDFs-Ordner. Beispiel:

Bemerkung

Für die folgenden Beispiele wird eine Unterabfrage verwendet, die versucht, die Spalte mit dem unbekannten Typ zu simulieren

Oracle
SELECT AsDate + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM TIMES) FROM TIMES;

SELECT AsTimestamp + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM TIMES) FROM TIMES;
Copy
Ergebnis

ASDATE+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES)

2021-11-11 00:00:00.000

ASTIMESTAMP+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES)

2021-11-10 11:00:00.000

Snowflake
SELECT AsDate + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM
TIMES
) FROM
TIMES;

SELECT AsTimestamp + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM
TIMES
) FROM
TIMES;
Copy
Ergebnis

PUBLIC.DATEADD_UDF( ASDATE, (SELECT EXTRACT(DAY FROM ASTIMESTAMPTWO) FROM PUBLIC.TIMES))

2021-11-11

PUBLIC.DATEADD_UDF( ASTIMESTAMP, (SELECT EXTRACT(DAY FROM ASTIMESTAMPTWO) FROM PUBLIC.TIMES))

2021-11-10 11:00:00.000

Subtraktion

Kombinationsmatrix

Subtraktion

Date

Zeitstempel

Zahl

Intervall

Unbekannt

Float

Datum

DATEDIFF

TIMESTAMP_DIFF___UDF

Datum - Intervall-Tag

Datum - Intervall IntervalUnit

DATEDIFF_UDF

DATEDIFF_UDF

Zeitstempel

TIMESTAMP_DIFF___UDF

TIMESTAMP_DIFF___UDF

Zeitstempel - Intervall-Tag

Zeitstempel - Intervall IntervalUnit

DATEDIFF_UDF

DATEDIFF_UDF

Zahl

INVALID

INVALID

Zahl - Zahl

INVALID

SSC-EWI-OR0036

Zahl - Gleitkomma

Intervall

INVALID

INVALID

INVALID

SSC-EWI-OR0036

Unbekannt - Intervall IntervalUnit

NOT SUPPORTED IN ORACLE

Unbekannt

DATEDIFF_UDF

DATEDIFF_UDF

SSC-EWI-OR0036

Unbekannt - Intervall IntervalUnit

SSC-EWI-OR0036

SSC-EWI-OR0036

Gleitkomma

DATEDIFF_UDF

DATEDIFF_UDF

Gleitkomma - Zahl

NOT SUPPORTED IN ORACLE

SSC-EWI-OR0036

Gleitkomma - Gleitkomma

Bemerkung

Eine Spalte vom unbekannten Typ entsteht dadurch, dass der Migrantsdienst den Datentyp der Spalte nicht ermitteln konnte. Dies kann aus vielen Gründen geschehen. Beispiele: fehlende DDLs in den bearbeiteten Tabellen, Spalten aus Operationen in Ansichten, CTES oder Unterabfragen usw.

Warnung

Standardmäßig migriert Snow Convert Operationen des Typs Datum/Zeitstempel + Intervall in die nativen Snowflake-Operationen, aber in einigen Fällen kann es sinnvoll sein, eine entsprechende UDF zu verwenden. Weitere Details zu dieser UDF finden Sie hier.

Die verschiedenen Pfade, die der Migrationsdienst für die Auflösung der Subtraktionsoperationen verwenden kann, werden unten erläutert:

Ungültig

Bestimmte Kombinationen sind nicht gültig, um Substraktionoperationen in Oracle auszuführen:

Oracle
SELECT 1 - AsDate FROM TIMES;

SELECT 1 - AsTimestamp FROM TIMES;
Copy
Ergebnis
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got DATE

SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP

Copy

DATEDIFF

Die Subtraktion zwischen zwei Operanden vom Typ DATE wird in die DATEDIFF-Funktion von Snowflake unter Verwendung von DAY als Zeiteinheit (erster Parameter) konvertiert. Beispiel

Oracle
SELECT AsDate - AsDateTwo FROM TIMES;
Copy
Ergebnis

ASDATE-ASDATETWO

1

Snowflake
SELECT AsDate - AsDateTwo FROM
TIMES;
Copy
Ergebnis

DATEDIFF(DAY, ASDATETWO, ASDATE)

1

Datum - Intervall-Tag

Dies ist die aktuelle Transformation für die Subtraktionsoperation zwischen einem Datumstyp und einer Zahl. Beispiel

Oracle
SELECT AsDate - 1 FROM TIMES;

SELECT AsDate + -1 FROM TIMES;
Copy
Ergebnis

ASDATE-1

2021-11-05 00:00:00.000

ASDATE+-1

2021-11-05 00:00:00.000

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
 AsDate - 1 FROM
 TIMES;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! AsDate + -1 FROM
 TIMES;
Copy
Ergebnis

ASDATE - INTERVAL ‚1 DAY‘

2021-11-05

ASDATE + INTERVAL ‚-1 DAY‘

2021-11-05

Zeitstempel - Intervall-Tag

Dies ist die aktuelle Transformation für die Additionsoperation zwischen einem Zeitstempeltyp und einer Zahl. Beispiel

Oracle
SELECT AsTimestamp - 1 FROM TIMES;

SELECT AsTimestamp + -1 FROM TIMES;
Copy
Ergebnis

ASTIMESTAMP-1

2021-11-04 11:00:00.000

ASTIMESTAMP+-1

2021-11-04 11:00:00.000

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
 AsTimestamp - 1 FROM
 TIMES;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! AsTimestamp + -1 FROM
 TIMES;
Copy
Ergebnis

ASTIMESTAMP - INTERVAL ‚1 DAY‘

2021-11-04 11:00:00.000

ASTIMESTAMP + INTERVAL ‚-1 DAY‘

2021-11-04 11:00:00.000

Bemerkung

Hinweis: In Oracle enthalten sowohl die Spalte DATE als auch die Spalte TIMESTAMP eine Zeitkomponente, aber Oracle hat die vom NLS_DATE_FORMAT-Parameter angegebene Formatmaske verwendet , um zu entscheiden, wie das Datum implizit in eine Zeichenfolge konvertiert werden soll. Deshalb kann das Ergebnis bei der Durchführung bestimmter Operationen zwischen TIMESTAMP und Intervals als DATE angezeigt werden, wodurch die Zeitkomponente ausgeblendet wird, es sei denn, der Parameter NLS_DATE_FORMAT wird geändert.

Weitere Informationen zum NLS_DATE_FORMAT-Format finden Sie hier.

TIMESTAMP_DIFF_UDF

Die Subtraktionen zwischen Zeitstempeltypen und Daten mit einem Zeitstempel (und umgekehrt) werden durch Einfügen der benutzerdefinierten Funkion TIMESTAMP_DIFF_UDF benutzerdefinierte Funktion (Implementierung hier) aufgelöst. Beispiel

Oracle
SELECT AsTimeStamp - AsTimeStampTwo FROM TIMES;

SELECT AsTimeStamp - AsDateTwo FROM TIMES;

SELECT AsDateTwo - AsTimeStamp FROM TIMES;
Copy
Ergebnis

ASTIMESTAMP-ASTIMESTAMPTWO

+000000000 01:00:00.000000

ASTIMESTAMP-ASDATETWO

+000000000 11:00:00.000000

ASDATETWO-ASTIMESTAMP

-000000000 11:00:00.000000

Snowflake
SELECT AsTimeStamp - AsTimeStampTwo FROM
TIMES;

SELECT AsTimeStamp - AsDateTwo FROM
TIMES;

SELECT AsDateTwo - AsTimeStamp FROM
TIMES;
Copy
Ergebnis

PUBLIC.TIMESTAMP_DIFF_UDF( ASTIMESTAMP, ASTIMESTAMPTWO)

+000000000 01:00:00.00000000

PUBLIC.TIMESTAMP_DIFF_UDF( ASTIMESTAMP, ASDATETWO)

+000000000 11:00:00.00000000

PUBLIC.TIMESTAMP_DIFF_UDF( ASDATETWO, ASTIMESTAMP)

-000000000 -11:00:00.00000000

DATEDIFF_UDF

Für die Fälle, in denen es eine Additionsoperation zwischen einem Datums- oder Zeitstempeltyp und einem unbekannten Typ gibt, wird eine benutzerdefinierte Funktion (UDF) hinzugefügt. Die UDF-Implementierung finden Sie hier, aber sie kann bearbeitet werden, um das auszuführen, was erforderlich ist. Die UDF befindet sich im UDFs-Ordner. Beispiel:

Oracle
SELECT ASDATE - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;

SELECT ASTIMESTAMP - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
Copy
Ergebnis

ASDATE-(EXTRACT(DAYFROMASDATE))

2021-10-31 00:00:00.000

ASTIMESTAMP-(EXTRACT(DAYFROMASDATE))

2021-10-30 11:00:00.000

Snowflake
SELECT ASDATE - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;


SELECT ASTIMESTAMP - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
Copy
Ergebnis

PUBLIC.DATEDIFF_UDF( ASDATE, (EXTRACT(DAY FROM ASDATE)))

2021-10-31

PUBLIC.DATEDIFF_UDF( ASTIMESTAMP, (EXTRACT(DAY FROM ASDATE)))

2021-10-30 11:00:00.000

Häufige Fälle

Warnung: SSC-EWI-OR0036

Diese Warnung wird verwendet, um anzuzeigen, ob sich eine Additions- oder Subtraktionsoperation aufgrund der Datentypen der Operanden möglicherweise nicht korrekt verhält. Das bedeutet, dass das Ergebnis der Operation in Snowflake möglicherweise nicht funktionelle mit der in Oracle übereinstimmt. Addition und Subtraktion zwischen einem Datums- oder numerischen Typ und einem unbekannten Typ gehören zu den häufigsten Fällen. Beispiel

Oracle
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
Copy
Snowflake
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
Copy

Dieser EWI wird bei Operationen hinzugefügt, bei denen der Typ einer Spalte nicht aufgelöst werden konnte. Wenn der Spaltentyp INTERVAL ist und die Operation nur mit anderen Intervallen durchgeführt wird, wird der EWI hinzugefügt, der Code wird jedoch nicht auskommentiert. Das folgende Beispiel beschreibt dieses Verhalten:

Oracle
SELECT INTERVAL '1' DAY + interval_column FROM UNKNOWN_TABLE;
Copy
Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!!
interval_column + INTERVAL '1 day' FROM
UNKNOWN_TABLE;
Copy

Bekannte Probleme

1. TIMESTAMP DIFF UDF improvement

TIMESTAMP_DIFF_UDF muss verbessert werden, um den Rückgabetyp angeben zu können. Dies bedeutet, dass ein dritter Parameter hinzugefügt wird, bei dem die Zeitkomponente angegeben werden kann, z. B. Tag, Stunde, Monat usw.

2. Built-in functions as operators

Derzeit gibt es keine Verwaltung für Datumsoperationen zwischen integrierten Funktionen, die Datumstypen zurückgeben.

3. Multiple operands

Derzeit gibt es keine Verwaltung für Datumsoperationen mit mehr als zwei Operanden. Es kann funktionieren, aber es können auch Probleme auftreten.

4. Comparison operators

Derzeit gibt es keine Verwaltung für Datumsoperationen mit Vergleichsoperatoren wie größer als, kleiner als usw.

5. Output format

Das Ergebnisformat der arithmetischen Operationen kann mit dem nächsten Befehl ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DESIRED-FORMAT'; in Snowflake geändert werden.

6. Issues in interval operations with seconds precision

Einige Operationen können sich in der Genauigkeit unterscheiden, insbesondere solche, die Intervalle mit Sekundengenauigkeit enthalten. Dies liegt daran, dass Oracle abhängig von der Genauigkeit rundet. Das Snowflake-Intervall unterstützt keine Sekunden mit Dezimalstellen. Um das gleiche Ergebnis zu erzielen, müssen die zweiten Dezimalstellen in Millisekundenschritten unter Berücksichtigung der von Oracle vorgenommenen Rundungen geändert werden. Das folgende Beispiel zeigt dieses Problem

Oracle
SELECT AsTimeStamp+INTERVAL '15.6789' SECOND(2,3) FROM times;

SELECT AsTimeStamp+INTERVAL '15.6783' SECOND(2,3) FROM times;
Copy
Ergebnis

ASTIMESTAMP+INTERVAL’15.6789’SECOND(2,3)

2021-11-05 11:00:15.679

ASTIMESTAMP+INTERVAL’15.6783’SECOND(2,3)

2021-11-05 11:00:15.678

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!!
 AsTimeStamp + INTERVAL '15.6789 second'
FROM
 times;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!! AsTimeStamp + INTERVAL '15.6783 second'
FROM
 times;
Copy
Ergebnis

ASTIMESTAMP + INTERVAL ‚15.6789 SECOND‘

2021-11-05 11:00:16.000

ASTIMESTAMP + INTERVAL ‚15.6783 SECOND‘

2021-11-05 11:00:16.000

ASTIMESTAMP + INTERVAL ‚15 SECOND, 679 MILLISECOND‘

2021-11-05 11:00:15.679

ASTIMESTAMP + INTERVAL ‚15 SECOND, 678 MILLISECOND‘

2021-11-05 11:00:15.678

Zugehörige EWIs

  1. SSC-EWI-0108: Die folgende Unterabfrage stimmt mit mindestens einem der Muster überein, die als ungültig angesehen werden und kann Kompilierungsfehler verursachen.

  2. SSC-EWI-OR0036: Bei Problemen mit der Auflösung von Typen verhält sich die arithmetische Operation zwischen Zeichenfolge und Datum möglicherweise nicht korrekt.

Intervall UDFs vs. Snowflake native Intervalloperation

Beschreibung

Die folgende Tabelle zeigt einen Vergleich zwischen DATEADD_UDF INTERVAL und DATEDIFF_UDF INTERVAL gegenüber der nativen Snowflake-Operation für die Intervall-Arithmetik.

Erforderlicher Code

Um die Abfragen der Vergleichstabelle auszuführen, müssen Sie den folgenden Code ausführen:

CREATE OR REPLACE TABLE TIMES(
AsTimeStamp TIMESTAMP,
AsTimestampTwo TIMESTAMP,
AsDate DATE,
AsDateTwo DATE
);

INSERT INTO TIMES VALUES (
  TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'), 
  TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'), 
  TO_DATE('06/11/21', 'dd/mm/yy'), 
  TO_DATE('05/11/21', 'dd/mm/yy'));

CREATE TABLE UNKNOWN_TABLE(
  Unknown timestamp
);

INSERT INTO UNKNOWN_TABLE VALUES (
  TO_TIMESTAMP('01/10/09, 12:00 P.M.', 'dd/mm/yy, hh:mi P.M.')
);
Copy
CREATE OR REPLACE TABLE TIMES (
  AsTimeStamp TIMESTAMP(6),
  AsTimestampTwo TIMESTAMP(6),
  AsDate TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
  AsDateTwo TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
  )
  COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
  ;

  INSERT INTO TIMES
  VALUES (
  TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
  TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
  TO_DATE('06/11/21', 'dd/mm/yy'),
  TO_DATE('05/11/21', 'dd/mm/yy'));

  CREATE OR REPLACE TABLE UNKNOWN_TABLE (
  Unknown TIMESTAMP(6)
  )
  COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
  ;

  INSERT INTO UNKNOWN_TABLE
  VALUES (
  TO_TIMESTAMP('01/10/09, 12:00 P.M.', 'dd/mm/yy, hh:mi P.M.')
);
Copy

Vergleichstabelle

Oracle

SELECT AsTimeStamp+INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1' MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1' MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '2' MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '2' MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsTimeStamp+INTERVAL '10' DAY FROM TIMES;
SELECT AsTimeStamp-INTERVAL '10' DAY FROM TIMES;
SELECT AsTimeStamp+INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '5' HOUR FROM TIMES;
SELECT AsTimeStamp-INTERVAL '5' HOUR FROM TIMES;
SELECT AsTimeStamp+INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsTimeStamp-INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsTimeStamp+INTERVAL '30' MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '30' MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsTimeStamp+INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsDate+INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsDate-INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsDate+INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsDate-INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsDate+INTERVAL '1' MONTH FROM TIMES;
SELECT AsDate-INTERVAL '1' MONTH FROM TIMES;
SELECT AsDate+INTERVAL '2' MONTH FROM TIMES;
SELECT AsDate-INTERVAL '2' MONTH FROM TIMES;
SELECT AsDate+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsDate-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsDate+INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsDate-INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsDate+INTERVAL '10' DAY FROM TIMES;
SELECT AsDate-INTERVAL '10' DAY FROM TIMES;
SELECT AsDate+INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '5' HOUR FROM TIMES;
SELECT AsDate-INTERVAL '5' HOUR FROM TIMES;
SELECT AsDate+INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsDate-INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsDate+INTERVAL '30' MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '30' MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsDate-INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsDate+INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsDate-INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT Unknown+INTERVAL '1-1' YEAR(2) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1-1' YEAR(2) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '2-1' YEAR(4) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '2-1' YEAR(4) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '2' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '2' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 01:10' DAY TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 01:10' DAY TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 1' DAY TO HOUR FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 1' DAY TO HOUR FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '10' DAY FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '10' DAY FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '3:05' HOUR TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '3:05' HOUR TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '5' HOUR FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '5' HOUR FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '5:10' MINUTE TO SECOND FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '5:10' MINUTE TO SECOND FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '30' MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '30' MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '333' HOUR(3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '333' HOUR(3) FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '15.6789' SECOND(2,3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '15.6789' SECOND(2,3) FROM UNKNOWN_TABLE;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+ AsTimeStamp FROM TIMES;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+AsDate FROM TIMES;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+AsDate FROM TIMES;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1' MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1' MONTH+AsDate FROM TIMES;
SELECT INTERVAL '1' MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '2' MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '2' MONTH+AsDate FROM TIMES;
SELECT INTERVAL '2' MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+AsDate FROM TIMES;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 1' DAY TO HOUR+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 1' DAY TO HOUR+AsDate FROM TIMES;
SELECT INTERVAL '1 1' DAY TO HOUR+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '10' DAY+AsTimeStamp FROM TIMES;
SELECT INTERVAL '10' DAY+AsDate FROM TIMES;
SELECT INTERVAL '10' DAY+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '3:05' HOUR TO MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '3:05' HOUR TO MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '3:05' HOUR TO MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '5' HOUR+AsTimeStamp FROM TIMES;
SELECT INTERVAL '5' HOUR+AsDate FROM TIMES;
SELECT INTERVAL '5' HOUR+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '5:10' MINUTE TO SECOND+AsTimeStamp FROM TIMES;
SELECT INTERVAL '5:10' MINUTE TO SECOND+AsDate FROM TIMES;
SELECT INTERVAL '5:10' MINUTE TO SECOND+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '30' MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '30' MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '30' MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '333' HOUR(3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '333' HOUR(3)+AsDate FROM TIMES;
SELECT INTERVAL '333' HOUR(3)+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '15.6789' SECOND(2,3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '15.6789' SECOND(2,3)+AsDate FROM TIMES;
SELECT INTERVAL '15.6789' SECOND(2,3)+Unknown FROM UNKNOWN_TABLE;
Copy

Snowflake

SELECT AsTimeStamp + INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT Unknown + INTERVAL '1y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '2y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '2y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '2 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '2 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 01h, 10m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 01h, 10m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 1h' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 1h' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '10 day' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '10 day' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '3h, 05m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '3h, 05m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '5 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '5 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '5m, 10s' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '5m, 10s' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '30 minute' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '30 minute' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '333 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '333 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '15.6789 second' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '15.6789 second' FROM PUBLIC.UNKNOWN_TABLE;
Copy

UDF von Snowflake

SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''2'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''2'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''10'' DAY') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''10'' DAY') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''5'' HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''5'' HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''30'' MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''30'' MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.UNKNOWN_TABLE;
Copy

Ergebnisse

Oracle

Snowflake-Operation

UDF

2022-12-05 11:00:00.000

2022-12-05 11:00:00.000

2022-12-05 11:00:00.000

2020-10-05 11:00:00.000

2020-10-05 11:00:00.000

2020-10-05 11:00:00.000

2023-12-05 11:00:00.000

2023-12-05 11:00:00.000

2023-12-05 11:00:00.000

2019-10-05 11:00:00.000

2019-10-05 11:00:00.000

2019-10-05 11:00:00.000

2021-12-05 11:00:00.000

2021-12-05 11:00:00.000

2021-12-05 11:00:00.000

2021-10-05 11:00:00.000

2021-10-05 11:00:00.000

2021-10-05 11:00:00.000

2022-01-05 11:00:00.000

2022-01-05 11:00:00.000

2022-01-05 11:00:00.000

2021-09-05 11:00:00.000

2021-09-05 11:00:00.000

2021-09-05 11:00:00.000

2021-11-06 12:00:00.222

2021-11-06 12:00:00.222

2021-11-06 12:00:00.222

2021-11-04 09:59:59.778

2021-11-04 09:59:59.778

2021-11-04 09:59:59.778

2021-11-06 12:10:00.000

2021-11-06 12:10:00.000

2021-11-06 12:10:00.000

2021-11-04 09:50:00.000

2021-11-04 09:50:00.000

2021-11-04 09:50:00.000

2021-11-06 12:00:00.000

2021-11-06 12:00:00.000

2021-11-06 12:00:00.000

2021-11-04 10:00:00.000

2021-11-04 10:00:00.000

2021-11-04 10:00:00.000

2021-11-15 11:00:00.000

2021-11-15 11:00:00.000

2021-11-15 11:00:00.000

2021-10-26 11:00:00.000

2021-10-26 11:00:00.000

2021-10-26 11:00:00.000

2021-11-05 14:05:00.000

2021-11-05 14:05:00.000

2021-11-05 14:05:00.000

2021-11-05 07:55:00.000

2021-11-05 07:55:00.000

2021-11-05 07:55:00.000

2021-11-05 16:00:00.000

2021-11-05 16:00:00.000

2021-11-05 16:00:00.000

2021-11-05 06:00:00.000

2021-11-05 06:00:00.000

2021-11-05 06:00:00.000

2021-11-05 11:05:10.000

2021-11-05 11:05:10.000

2021-11-05 11:05:10.000

2021-11-05 10:54:50.000

2021-11-05 10:54:50.000

2021-11-05 10:54:50.000

2021-11-05 11:30:00.000

2021-11-05 11:30:00.000

2021-11-05 11:30:00.000

2021-11-05 10:30:00.000

2021-11-05 10:30:00.000

2021-11-05 10:30:00.000

2021-11-19 08:00:00.000

2021-11-19 08:00:00.000

2021-11-19 08:00:00.000

2021-10-22 14:00:00.000

2021-10-22 14:00:00.000

2021-10-22 14:00:00.000

2021-11-05 11:00:15.679

2021-11-05 11:00:16.000

2021-11-05 11:00:15.678

2021-11-05 10:59:44.321

2021-11-05 10:59:44.000

2021-11-05 11:00:15.678

2022-12-06 00:00:00.000

2022-12-06

2022-12-06

2020-10-06 00:00:00.000

2020-10-06

2020-10-06

2023-12-06 00:00:00.000

2023-12-06

2023-12-06

2019-10-06 00:00:00.000

2019-10-06

2019-10-06

2021-12-06 00:00:00.000

2021-12-06

2021-12-06

2021-12-06 00:00:00.000

2021-10-06

2021-10-06

2022-01-06 00:00:00.000

2022-01-06

2022-01-06

2021-09-06 00:00:00.000

2021-09-06

2021-09-06

2021-11-07 01:00:00.000

2021-11-07 01:00:00.222

2021-11-07

2021-11-04 22:59:59.000

2021-11-04 22:59:59.778

2021-11-04

2021-11-07 01:10:00.000

2021-11-07 01:10:00.000

2021-11-07

2021-11-04 22:50:00.000

2021-11-04 22:50:00.000

2021-11-04

2021-11-07 01:00:00.000

2021-11-07 01:00:00.000

2021-11-07

2021-11-04 23:00:00.000

2021-11-04 23:00:00.000

2021-11-04

2021-11-16 00:00:00.000

2021-11-16

2021-11-16

2021-10-27 00:00:00.000

2021-10-27

2021-10-27

2021-11-06 03:05:00.000

2021-11-06 03:05:00.000

2021-11-06

2021-11-05 20:55:00.000

2021-11-05 20:55:00.000

2021-11-05

2021-11-06 05:00:00.000

2021-11-06 05:00:00.000

2021-11-06

2021-11-05 19:00:00.000

2021-11-05 19:00:00.000

2021-11-05

2021-11-06 00:05:10.000

2021-11-06 00:05:10.000

2021-11-06

2021-11-05 23:54:50.000

2021-11-05 23:54:50.000

2021-11-05

2021-11-06 00:30:00.000

2021-11-06 00:30:00.000

2021-11-06

2021-11-05 23:30:00.000

2021-11-05 23:30:00.000

2021-11-05

2021-11-19 21:00:00.000

2021-11-19 21:00:00.000

2021-11-19

2021-10-23 03:00:00.000

2021-10-23 03:00:00.000

2021-10-23

2021-11-06 00:00:15.000

2021-11-06 00:00:16.000

2021-11-06

2021-11-05 23:59:44.000

2021-11-05 23:59:44.000

2021-11-05

2010-11-01 12:00:00.000

2010-11-01 12:00:00.000

2010-11-01 12:00:00.000

2008-09-01 12:00:00.000

2008-09-01 12:00:00.000

2008-09-01 12:00:00.000

2011-11-01 12:00:00.000

2011-11-01 12:00:00.000

2011-11-01 12:00:00.000

2007-09-01 12:00:00.000

2007-09-01 12:00:00.000

2007-09-01 12:00:00.000

2009-11-01 12:00:00.000

2009-11-01 12:00:00.000

2009-11-01 12:00:00.000

2009-09-01 12:00:00.000

2009-09-01 12:00:00.000

2009-09-01 12:00:00.000

2009-12-01 12:00:00.000

2009-12-01 12:00:00.000

2009-12-01 12:00:00.000

2009-08-01 12:00:00.000

2009-08-01 12:00:00.000

2009-08-01 12:00:00.000

2009-10-02 13:00:00.222

2009-10-02 13:00:00.222

2009-10-02 13:00:00.222

2009-09-30 10:59:59.778

2009-09-30 10:59:59.778

2009-09-30 10:59:59.778

2009-10-02 13:10:00.000

2009-10-02 13:10:00.000

2009-10-02 13:10:00.000

2009-09-30 10:50:00.000

2009-09-30 10:50:00.000

2009-09-30 10:50:00.000

2009-10-02 13:00:00.000

2009-10-02 13:00:00.000

2009-10-02 13:00:00.000

2009-09-30 11:00:00.000

2009-09-30 11:00:00.000

2009-09-30 11:00:00.000

2009-10-11 12:00:00.000

2009-10-11 12:00:00.000

2009-10-11 12:00:00.000

2009-09-21 12:00:00.000

2009-09-21 12:00:00.000

2009-09-21 12:00:00.000

2009-10-01 15:05:00.000

2009-10-01 15:05:00.000

2009-10-01 15:05:00.000

2009-10-01 08:55:00.000

2009-10-01 08:55:00.000

2009-10-01 08:55:00.000

2009-10-01 17:00:00.000

2009-10-01 17:00:00.000

2009-10-01 17:00:00.000

2009-10-01 07:00:00.000

2009-10-01 07:00:00.000

2009-10-01 07:00:00.000

2009-10-01 12:05:10.000

2009-10-01 12:05:10.000

2009-10-01 12:05:10.000

2009-10-01 11:54:50.000

2009-10-01 11:54:50.000

2009-10-01 11:54:50.000

2009-10-01 12:30:00.000

2009-10-01 12:30:00.000

2009-10-01 12:30:00.000

2009-10-01 11:30:00.000

2009-10-01 11:30:00.000

2009-10-01 11:30:00.000

2009-10-15 09:00:00.000

2009-10-15 09:00:00.000

2009-10-15 09:00:00.000

2009-09-17 15:00:00.000

2009-09-17 15:00:00.000

2009-09-17 15:00:00.000

2009-10-01 12:00:15.679

2009-10-01 12:00:16.000

2009-10-01 12:00:15.678

2009-10-01 11:59:44.321

2009-10-01 11:59:44.000

2009-10-01 11:59:44.321

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

  1. SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf

PL SQL-Datentypen

BINARY_INTEGER-Datentyp

Dieser Datentyp ist identisch mit dem PLS_INTEGER Datentyp.

PLS_INTEGER-Datentyp

Beschreibung

Der Datentyp PLS_INTEGER speichert ganze Zahlen mit Vorzeichen im Bereich von -2.147.483.648 bis 2.147.483.647, dargestellt in 32 Bit. (Oracle Language Reference PLS_INTEGER Data Type)

Der Datentyp PLS_INTEGER wird in NUMBER umgewandelt. Diese Transformation gilt auch für jeden PLS_INTEGER Subtyp:

  • NATURAL

  • NATURALN

  • POSITIVE

  • POSITIVEN

  • SIGNTYPE

  • SIMPLE_INTEGER

Warnung

Einige dieser Untertypen werden derzeit nicht von SnowConvert AI erkannt, sodass sie in VARIANT konvertiert und als benutzerdefinierte Typen betrachtet werden. Es gibt bereits ein Work-Element zur Behebung des Problems.

Beispielhafte Quellcode-Muster

Bitte beachten Sie die folgende Tabelle und ihre Einfügungen für die folgenden Beispiele:

Code

CREATE TABLE PLS_INTEGER_TABLE(
	COL NUMBER
);
Copy

PLS_INTEGER Verwendung in prozeduralen Blöcken

Oracle
CREATE OR REPLACE PROCEDURE PLS_INTEGER_EXAMPLE
IS
-- PLS_INTEGER AND BINARY INTEGER ALIASES
PLS_INTEGER_VAR PLS_INTEGER;
BINARY_INTEGER_VAR BINARY_INTEGER;

NUMBER_VAR NUMBER;
BEGIN
	NUMBER_VAR := 2;

	-- maximum possible value
	PLS_INTEGER_VAR := 2147483647;
	
	-- implicit cast to number
	INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR);
	PLS_INTEGER_VAR := 2147483647;
	
	-- operations with other numeric expressions
	INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR + 1);
	INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR + NUMBER_VAR);
END;

CALL PLS_INTEGER_EXAMPLE();
SELECT * FROM PLS_INTEGER_TABLE;
Copy
Ergebnis

COL

2147483647

2147483648

2147483649

Snowflake
CREATE OR REPLACE PROCEDURE PLS_INTEGER_EXAMPLE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		-- PLS_INTEGER AND BINARY INTEGER ALIASES
		PLS_INTEGER_VAR NUMBER;
		BINARY_INTEGER_VAR NUMBER;

		NUMBER_VAR NUMBER(38, 18);
	BEGIN
		NUMBER_VAR := 2;
	-- maximum possible value
		PLS_INTEGER_VAR := 2147483647;

		-- implicit cast to number
		INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR);
		PLS_INTEGER_VAR := 2147483647;

	-- operations with other numeric expressions
	INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR + 1);
	INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR + :NUMBER_VAR);
	END;
$$;

CALL PLS_INTEGER_EXAMPLE();

SELECT * FROM
	PLS_INTEGER_TABLE;
Copy
Ergebnis

COL

2147483647

2147483648

2147483649

Bekannte Probleme

1. Storage and performance features were not preserved

Oracle PLS_INTEGER hat einige Vorteile in Bezug auf die Speichergröße und die Leistung bei arithmetischen Operationen. Diese Features wurden nicht emuliert, da Snowflake NUMBER nicht über sie verfügt. Weitere Informationen finden Sie unter PLS_INTEGER Dokumentation.

Zugehörige EWIs

Keine zugehörigen EWIs.

Zeichen-Datentypen

Zeichen-Datentypen speichern (alphanumerische) Zeichendaten, bei denen es sich um Wörter und Freiformtext handelt, im Datenbankzeichensatz oder im nationalen Zeichensatz. (Oracle SQL-Sprachreferenz – Zeichen-Datentypen)

CHAR-Datentyp

Beschreibung

Der Datentyp CHAR gibt eine Zeichenfolge mit fester Länge im Zeichensatz der Datenbank an. (Oracle SQL Language Reference CHAR Data Type)

Wie in der Oracle-Dokumentation angegeben, ist die Größe im Datentyp CHAR eine Längeneinschränkung und sollte nicht mit der Kapazität verwechselt werden. Die Gesamtzahl der Zeichen, die in CHAR gespeichert werden können, kann je nach Zeichensatz und Konfiguration der Datenbank variieren, in der Regel beträgt die maximal zulässige Größe jedoch 2000.

In Snowflake sind CHAR Typen gleichbedeutend mit VARCHAR und wie Sie hier sehen können:

Snowflake SQL-Referenz: Text-Datentypen

Die maximale Standardgröße ist etwas größer. Das bedeutet jedoch nicht, dass eine Snowflake VARCHAR mehr Speicherplatz verbraucht, wie in der Dokumentation erwähnt:

Eine 1-Zeichen-Zeichenfolge in einer VARCHAR(16777216) Spalte verbraucht nur ein einziges Zeichen.

CHAR [ (size [ BYTE | CHAR ]) ]
Copy

Beispielhafte Quellcode-Muster

Char-Datentypen in Create Table

Oracle
CREATE TABLE char_data_types
(
	char_column1 CHAR,
	char_column2 CHAR(15),
	char_column3 CHAR(15 BYTE),
	char_column4 CHAR(15 CHAR)
);

INSERT INTO char_data_types VALUES ('H', 'Hello world', 'Hello world', 'Hello world');
Copy
Snowflake
CREATE OR REPLACE TABLE char_data_types
(
	char_column1 CHAR,
	char_column2 CHAR(15),
	char_column3 CHAR(15),
	char_column4 CHAR(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO char_data_types
VALUES ('H', 'Hello world', 'Hello world', 'Hello world');
Copy

Abrufen von Daten aus Char-Spalten

Oracle
SELECT * FROM char_data_types;
Copy
Ergebnis

CHAR_COLUMN1

CHAR_COLUMN2

CHAR_COLUMN3

CHAR_COLUMN4

H

Hello world

Hello world

Hello world

Snowflake
SELECT * FROM
char_data_types;
Copy
Ergebnis

CHAR_COLUMN1

CHAR_COLUMN2

CHAR_COLUMN3

CHAR_COLUMN4

H

Hello world

Hello world

Hello world

Bemerkung

In Oracle wird der Wert mit Leerzeichen aufgefüllt, damit er in die feste Größe passt, die in der Spaltendefinition festgelegt wurde. Andererseits verwendet Snowflakes dynamische Größe (unter Beibehaltung der Längenbeschränkung), um den Wert zu speichern.

Überprüfung der internen Datentypen auf CHAR

Wie eingangs erwähnt, verwendet Snowflake intern eine VARCHAR für die Spalten des Typs CHAR. Wir können dies anhand der Beschreibung der Tabellen bestätigen:

Oracle

Snowflake

Bemerkung

Die Längenbeschränkung wird beibehalten, aber der Speicher, den die Spalten verwenden, ist auf jeder DBMS unterschiedlich.

Abrufen der Größe jeder Spalte in Bytes:

Oracle
SELECT 
LENGTHB(char_column1),
LENGTHB(char_column2),
LENGTHB(char_column3),
LENGTHB(char_column4)  
FROM char_data_types;
Copy
Ergebnis

LENGTHB(CHAR_COLUMN1)

LENGTHB(CHAR_COLUMN2)

LENGTHB(CHAR_COLUMN3)

LENGTHB(CHAR_COLUMN4)

1

15

15

15

Snowflake
SELECT
OCTET_LENGTH(char_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column3) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column4) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
char_data_types;
Copy
Ergebnis

OCTET_LENGTH(CHAR_COLUMN1)

OCTET_LENGTH(CHAR_COLUMN2)

OCTET_LENGTH(CHAR_COLUMN3)

OCTET_LENGTH(CHAR_COLUMN4)

1

11

11

11

Hinweis

Abgesehen von diesen kleinen Unterschieden bleibt die Integrität der Daten erhalten.

Bekannte Probleme

1. Die Ergebnisse einiger integrierter Funktionen können variieren

Wie im vorangegangenen Abschnitt erläutert, kann es Fälle geben, in denen integrierte Funktionen über die Spalten verwendet werden, die unterschiedliche Ergebnisse liefern können. Ermitteln Sie zum Beispiel die Länge einer Spalte.

Zugehörige EWIs

  1. SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.

NCHAR-Datentyp

Beschreibung

Der Datentyp NCHAR gibt eine Zeichenfolge mit einer festen Länge im nationalen Zeichensatz an. (Oracle SQL Language Reference NCHAR)

NCHAR erlaubt es, Sonderzeichen mit ihrem Unicode zu speichern, damit sie bei jeder Verwendung erhalten bleiben. Diese Sonderzeichen benötigen möglicherweise mehr Bits, um gespeichert zu werden, und deshalb ist der NCHAR Zeichensatz standardmäßig AL16UTF16, im Gegensatz zum üblichen Zeichensatz für CHAR, der normalerweise AL32UTF8 ist.

NCHAR wird in Snowflake als NCHAR beibehalten, aber im Hintergrund verwendet Snowflake VARCHAR. Die Transformationsinformationen, die sich auf CHAR beziehen, sind auch für NCHAR gültig.

NCHAR [ (size) ]

Copy

Beispielhafte Quellcode-Muster

Nchar-Datentypen in Create Table

Oracle
CREATE TABLE nchar_data_types
(
	nchar_column1 NCHAR,
	nchar_column2 NCHAR(5)
);

INSERT INTO nchar_data_types VALUES ('ភ', 'ភាសាខ');
Copy
Snowflake
CREATE OR REPLACE TABLE nchar_data_types
(
	nchar_column1 NCHAR,
	nchar_column2 NCHAR(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO nchar_data_types
VALUES ('ភ', 'ភាសាខ');
Copy

Bemerkung

Wenn Sie in Oracle versuchen, diese Werte in eine CHAR Spalte mit der gleichen Größe einzufügen, wird ein Fehler ausgelöst: value too large for column.

Abrufen von Informationen aus Nchar-Spalten

Oracle
SELECT * FROM nchar_data_types;
Copy
Ergebnis

NCHAR_COLUMN1

NCHAR_COLUMN2

ភាសាខ

Snowflake
SELECT * FROM
nchar_data_types;
Copy
Ergebnis

NCHAR_COLUMN1

NCHAR_COLUMN2

ភាសាខ

Abrufen der Größe jeder Spalte in Bytes

Oracle
SELECT 
LENGTHB(nchar_column1),
LENGTHB(nchar_column2)
FROM nchar_data_types;
Copy
Ergebnis

LENGTHB(NCHAR_COLUMN1)

LENGTHB(NCHAR_COLUMN2)

                 2|                    10|
Copy
Snowflake
SELECT
OCTET_LENGTH(nchar_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(nchar_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
nchar_data_types;
Copy
Ergebnis

OCTET_LENGTH(NCHAR_COLUMN1)

OCTET_LENGTH(NCHAR_COLUMN2)

                      3|                         15|
Copy

Beachten Sie, dass die in der Spaltendeklaration angegebene Zahl die Größe in Zeichen und nicht in Bytes ist. Deshalb wird mehr Platz für die Speicherung dieser Sonderzeichen verwendet.

Bemerkung

In Snowflake verwendet VARCHAR UTF-8, die Größe kann je nach Unicode-Zeichen, das in 1, 2, 3 oder 4 Bytes dargestellt werden kann, variieren. In diesem Fall benötigt das kambodschanische Zeichen 3 Bytes zum Speichern.

Hinweis

Abgesehen von diesen kleinen Unterschieden bleibt die Integrität der Daten erhalten.

Bekannte Probleme

1. Die Ergebnisse einiger integrierter Funktionen können variieren

Wie im vorangegangenen Abschnitt erläutert, kann es Fälle geben, in denen integrierte Funktionen über die Spalten verwendet werden, die unterschiedliche Ergebnisse liefern können. Ermitteln Sie zum Beispiel die Länge einer Spalte.

Zugehörige EWIs

  1. SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.

NVARCHAR2-Datentyp

Beschreibung

Der Datentyp NVARCHAR2 spezifiziert eine Zeichenfolge mit einer variablen Länge im nationalen Zeichensatz. (Oracle SQL Language Reference NVARCHAR2)

NVARCHAR2 (size)

Copy

NVARCHAR2 erlaubt es, Sonderzeichen mit ihrem Unicode zu speichern, damit sie bei jeder Verwendung erhalten bleiben. Diese Sonderzeichen benötigen möglicherweise mehr Bits, um gespeichert zu werden, und deshalb ist der NVARCHAR2 Zeichensatz standardmäßig AL16UTF16, im Gegensatz zum üblichen Zeichensatz für VARCHAR2, der normalerweise AL32UTF8 ist.

NVARCHAR in VARCHAR in Snowflake transformiert, Transformationsinformationen zu VARCHAR2, gelten auch für NVARCHAR2.

NVARCHAR2 (size)

Copy

Beispielhafte Quellcode-Muster

Nvarchar2-Datentyp in Create Table

Oracle
CREATE TABLE nvarchar2_data_types
(
	nvarchar2_column NVARCHAR2 (5)
);

INSERT INTO nvarchar2_data_types VALUES ('ភាសាខ');
Copy
Snowflake
CREATE OR REPLACE TABLE nvarchar2_data_types
	(
		nvarchar2_column VARCHAR(5)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO nvarchar2_data_types
	VALUES ('ភាសាខ');
Copy

Bemerkung

Wenn Sie in Oracle versuchen, diese Werte in eine VARCHAR2 Spalte mit der gleichen Größe einzufügen, wird ein Fehler ausgelöst: value too large for column.

Abrufen von Informationen aus Nchar-Spalten

Oracle
SELECT * FROM nvarchar2_data_types;
Copy
Ergebnis

NVARCHAR2_COLUMN

ភាសាខ

Snowflake
SELECT * FROM
nvarchar2_data_types;
Copy
Ergebnis

NVARCHAR2_COLUMN

ភាសាខ

Abrufen der Größe jeder Spalte in Bytes

Oracle
SELECT 
LENGTHB(nvarchar2_column)
FROM nvarchar2_data_types;
Copy
Ergebnis

LENGTHB(NVARCHAR2_COLUMN)

10

Snowflake
SELECT
OCTET_LENGTH(nvarchar2_column) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
nvarchar2_data_types;
Copy
Ergebnis

OCTET_LENGTH(NVARCHAR2_COLUMN)

15

Beachten Sie, dass die in der Spaltendeklaration angegebene Zahl die Größe in Zeichen und nicht in Bytes ist. Deshalb wird mehr Platz für die Speicherung dieser Sonderzeichen verwendet.

Bemerkung

In Snowflake verwendet VARCHAR UTF-8, die Größe kann je nach Unicode-Zeichen, das in 1, 2, 3 oder 4 Bytes dargestellt werden kann, variieren. In diesem Fall benötigen die kambodschanischen Zeichen 3 Bytes zum Speichern.

Hinweis

Abgesehen von diesen kleinen Unterschieden bleibt die Integrität der Daten erhalten.

Bekannte Probleme

1. Die Ergebnisse einiger integrierter Funktionen können variieren

Wie im vorangegangenen Abschnitt erläutert, kann es Fälle geben, in denen integrierte Funktionen über die Spalten verwendet werden, die unterschiedliche Ergebnisse liefern können. Ermitteln Sie zum Beispiel die Länge einer Spalte.

Zugehörige EWIs

  1. SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.

VARCHAR-Datentyp

Beschreibung

Oracle empfiehlt die Verwendung von VARCHAR2 anstelle von VARCHAR, wie in der Dokumentation erläutert:

Oracle SQL Language Reference Varchar

Trotzdem wird die Syntax mit den ANSI-, DB2- und SQL/DS-Datentypen analyisiert und transformiert.

VARCHAR2-Datentyp

Beschreibung

Der Datentyp VARCHAR2 spezifiziert eine Zeichenfolge mit einer variablen Länge im Datenbankzeichensatz. (Oracle SQL Language Reference VARCHAR2)

Wie in der Oracle-Dokumentation angegeben, ist die Größe im Datentyp VARCHAR2 eine Längeneinschränkung und sollte nicht mit der Kapazität verwechselt werden. Die Gesamtzahl der Zeichen, die in VARCHAR2 gespeichert werden können, kann je nach Zeichensatz und Konfiguration der Datenbank variieren, in der Regel beträgt die maximal zulässige Größe jedoch 4000.

VARCHAR2 wird in Snowflake VARCHAR übersetzt, das standardmäßig eine größere Anzahl von Bytes/Zeichen speichern kann. In jedem Fall ist der verwendete Speicherplatz variabel und richtet sich nach der Größe des in der Spalte gespeicherten Wertes, wie in Oracle.

VARCHAR2 (size [ BYTE | CHAR ])
Copy

Beispielhafte Quellcode-Muster

Varchar2-Datentypen in Create Table

Oracle
CREATE TABLE varchar2_data_types
(
	varchar2_column1 VARCHAR2(5),
	varchar2_column2 VARCHAR2(5 BYTE),
	varchar2_column3 VARCHAR2(5 CHAR)
);

INSERT INTO varchar2_data_types VALUES ('H', 'Hello', 'Hell');
Copy
Snowflake
CREATE OR REPLACE TABLE varchar2_data_types
	(
		varchar2_column1 VARCHAR(5),
		varchar2_column2 VARCHAR(5),
		varchar2_column3 VARCHAR(5)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO varchar2_data_types
	VALUES ('H', 'Hello', 'Hell');
Copy

Abrufen von Daten aus Varchar-Spalten

Oracle
SELECT * FROM varchar2_data_types;
Copy
Ergebnis

VARCHAR2_COLUMN1

VARCHAR2_COLUMN2

VARCHAR2_COLUMN3

H

Hello

Hell

Snowflake
SELECT * FROM
varchar2_data_types;
Copy
Ergebnis

VARCHAR2_COLUMN1

VARCHAR2_COLUMN2

VARCHAR2_COLUMN3

H

Hello

Hell

Überprüfung der Variablengröße in den Spalten

Oracle
SELECT
LENGTHB(varchar2_column1),
LENGTHB(varchar2_column2),
LENGTHB(varchar2_column3) 
FROM VARCHAR2_DATA_TYPES;
Copy
Ergebnis

LENGTHB(VARCHAR2_COLUMN1)

LENGTHB(VARCHAR2_COLUMN2)

LENGTHB(VARCHAR2_COLUMN3)

1

5

4

Snowflake
SELECT
OCTET_LENGTH(varchar2_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(varchar2_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(varchar2_column3) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
VARCHAR2_DATA_TYPES;
Copy
Ergebnis

OCTET_LENGTH(VARCHAR2_COLUMN1)

OCTET_LENGTH(VARCHAR2_COLUMN2)

OCTET_LENGTH(VARCHAR2_COLUMN3)

1

5

4

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

  1. SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.

LOB-Datentypen

Beschreibung

Die integrierten LOB-Datentypen BLOB, CLOB und NCLOB (intern gespeichert) und BFILE (extern gespeichert) können große und unstrukturierte Daten wie Text-, Bild-, Video- und Geodaten speichern. (Oracle SQL-Sprachreferenz – LOB-Datentyp)

BFILE
BLOB
CLOB
NCLOB
Copy

Warnung

LOB-Datentypen werden in Snowflake nicht unterstützt. Gemäß der Snowflake-Dokumentation wird empfohlen, CLOB in VARCHAR und BLOB in BINARY zu transformieren, es gibt jedoch einige Einschränkungen. {% endhint %}

Warnung

LOB-Eigenschaften für Tabellen werden in Snowflake ebenfalls nicht unterstützt. {% endhint %}

BFILE-Datentyp

Description

Enthält einen Locator zu einer großen Binärdatei, die außerhalb der Datenbank gespeichert ist. Ermöglicht den Byte-Stream-E/A-Zugriff auf externe LOBs, die sich auf dem Datenbankserver befinden. Eine BFILE Spalte oder ein Attribut speichert einen BFILE Locator, der als Zeiger auf eine Binärdatei im Dateisystem des Servers dient. Der Locator verwaltet den Namen des Verzeichnisses und den Dateinamen. (Oracle SQL Language Reference BFILE Datatype).

Warnung

BFILE-Datentyp wird in Snowflake nicht unterstützt. VARCHAR wird stattdessen verwendet.

Beispielhafte Quellcode-Muster

Bfile-Datentyp in Create Table

Warnung

Oracle BFILE Spalten werden verwendet, um einen Locator mit dem Verzeichnis und dem Dateinamen zu speichern. Sie werden in Snowflake VARCHAR geändert, um das Verzeichnis und den Dateinamen in der Spalte zu speichern. Das Laden des Inhalts der Datei muss jedoch manuell erfolgen.

Oracle
--Create Table
CREATE TABLE bfile_table 
(
    col1 BFILE 
);

--Insert Bfilename
INSERT INTO bfile_table VALUES (
    BFILENAME('mydirectory', 'myfile.png')
);

--Select
SELECT * FROM bfile_table;
Copy
Ergebnis

COL1

[BFILE:myfile.png]

Snowflake
--Create Table
CREATE OR REPLACE TABLE bfile_table
    (
        col1
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
    VARCHAR
    )
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

--Insert Bfilename
INSERT INTO bfile_table
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png')
);

--Select
SELECT * FROM
    bfile_table;
Copy
Ergebnis

COL1

mydirectory\myfile.png

Warnung

UDF hinzugefügt, um BFILENAME() zu ersetzen.

UDF hinzugefügt

CREATE OR REPLACE FUNCTION PUBLIC.BFILENAME_UDF (DIRECTORYNAME STRING, FILENAME STRING)
RETURNS STRING
LANGUAGE SQL
IMMUTABLE 
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
	DIRECTORYNAME || '\\' || FILENAME
$$;
Copy

Bekannte Probleme

1. No access to the DBMS_LOB built-in package

Da LOB Datentypen in Snowflake nicht unterstützt werden, gibt es kein Äquivalent für die DBMS_LOB Funktionen und es gibt noch keine implementierten Umgehungsmöglichkeiten.

Zugehörige EWIs

  1. SSC-EWI-OR0105: Für die Nutzung der Spalte BFILE ist zusätzlicher Aufwand erforderlich. Die BUILD_STAGE_URL-Funktion ist eine empfohlene Problemumgehung.

BLOB-Datentyp

Beschreibung

Der Datentyp BLOB speichert unstrukturierte binäre große Objekte. BLOB Objekte können als Bitströme ohne Zeichensatzsemantik betrachtet werden. (Oracle SQL Language Reference BLOB Data Type).

Warnung

BLOB-Datentyp wird in Snowflake nicht unterstützt. BINARY wird stattdessen verwendet.

Beispielhafte Quellcode-Muster

BLOB in Create Table

Oracle
CREATE TABLE blobtable( blob_column BLOB, empty_column BLOB );

INSERT INTO blobtable VALUES (NULL, EMPTY_BLOB());
Copy
Snowflake
CREATE OR REPLACE TABLE blobtable ( blob_column BINARY,
empty_column BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO blobtable
VALUES (NULL, TO_BINARY(' '));
Copy

Abrufen von Daten

Oracle
SELECT * FROM blobtable;
Copy
Ergebnis

BLOB_COLUMN

EMPTY_COLUMN

[NULL]

[BLOB]

Snowflake
SELECT * FROM
blobtable;
Copy
Ergebnis

BLOB_COLUMN

EMPTY_COLUMN

NULL

Funktionales Beispiel

Warnung

Dieses Beispiel ist keine Übersetzung von SnowConvert AI, wird sie nur verwendet, um die funktionale Äquivalenz zwischen BLOB von Oracle und BINARY von Snowflake anzuzeigen.

Warnung

Wir verwenden die Funktionen utl_raw.cast_to_raw und DBMS_LOB.SUBSTR. Die Konvertierung für diese Funktionen wird derzeit von SnowConvert nicht unterstützt.

Oracle
INSERT INTO blobtable VALUES(
utl_raw.cast_to_raw('hello world'), EMPTY_BLOB());

SELECT DBMS_LOB.SUBSTR(blob_column) AS result
FROM blobtable;
Copy
Ergebnis

RESULT

[NULL]

hello world

Snowflake
INSERT INTO blobtable
VALUES(
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'utl_raw.cast_to_raw' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS cast_to_raw, TO_BINARY(' '));


SELECT
SUBSTR(blob_column, 1) AS result
FROM
blobtable;
Copy
Ergebnis

RESULT

[NULL]

hello world

Bekannte Probleme

1. The difference in max length BLOB (Oracle) and BINARY (Snowflake)

Die maximale Größe einer Oracle BLOB Spalte ist (4 Gigabyte - 1) * (Datenbankblockgröße) , aber Snowflake BINARY ist auf 8MB begrenzt.

2. Empty value with EMPTY_BLOB

Die Initialisierung einer Spalte mit EMPTY_BLOB() gibt einen leeren LOB Locator zurück. Nach der Übersetzung wird die Spalte eine Zeichenfolge mit ‚ ‚ zurückgeben.

3. No access to the DBMS_LOB built-in package

Da LOB Datentypen in Snowflake nicht unterstützt werden, gibt es kein Äquivalent für die DBMS_LOB Funktionen und es gibt noch keine implementierten Umgehungsmöglichkeiten.

Zugehörige EWIs

  1. SSC-EWI-OR0076: Integriertes Paket wird nicht unterstützt.

CLOB-Datentyp

Beschreibung

Ein zeichengroßes Objekt, das Einzelbyte- oder Multibyte-Zeichen enthält. Es werden sowohl Zeichensätze mit fester als auch mit variabler Breite unterstützt, die beide den Datenbankzeichensatz verwenden. (Oracle SQL Language Reference CLOB Data Type).

Warnung

CLOB-Datentyp wird in Snowflake nicht unterstützt. VARCHAR wird stattdessen verwendet.

Beispielhafte Quellcode-Muster

CLOB in Create Table

Oracle
CREATE TABLE clobtable ( clob_column CLOB, empty_column CLOB );

INSERT INTO clobtable VALUES ( 'THIS IS A TEST', EMPTY_CLOB() );
Copy
Snowflake
CREATE OR REPLACE TABLE clobtable ( clob_column VARCHAR,
empty_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO clobtable
VALUES ( 'THIS IS A TEST', TO_VARCHAR(' - '));
Copy

Abrufen von Daten

Oracle
SELECT * FROM clobtable;
Copy
Ergebnis

CLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

Snowflake
SELECT * FROM
clobtable;
Copy
Ergebnis

CLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

-

Bekannte Probleme

1. The difference in max length CLOB (Oracle) and VARCHAR (Snowflake)

Die maximale Größe einer Oracle CLOB Spalte ist (4 Gigabyte - 1) * (Datenbankblockgröße) , aber Snowflake VARCHAR ist auf 16MB begrenzt.

2. Empty value with EMPTY_CLOB

Die Initialisierung einer Spalte mit EMPTY_CLOB() gibt einen leeren LOB Locator zurück. In Snowflake hingegen wird nach der Übersetzung der Spalte eine Zeichenfolge mit „-“ zurückgegeben.

3. No access to the DBMS_LOB built-in package

Da LOB-Datentypen in Snowflake nicht unterstützt werden, gibt es kein Äquivalent für die DBMS_LOB-Funktionen und es sind noch keine Umgehungsmöglichkeiten implementiert.

Zugehörige EWIs

Keine zugehörigen EWIs.

NCLOB-Datentyp

Beschreibung

Ein zeichengroßes Objekt, das Unicode-Zeichen enthält. Es werden sowohl Zeichensätze mit fester Breite als auch mit variabler Breite unterstützt, die beide den nationalen Zeichensatz der Datenbank verwenden. (Oracle SQL Language Reference NCLOB Data Type).

Warnung

NCLOB-Datentyp wird in Snowflake nicht unterstützt. VARCHAR wird stattdessen verwendet.

Beispielhafte Quellcode-Muster

NCLOB in Create Table

Oracle
CREATE TABLE nclobtable ( nclob_column NCLOB, empty_column NCLOB );

INSERT INTO nclobtable VALUES ( 'THIS IS A TEST', EMPTY_CLOB() );
Copy
Snowflake
CREATE OR REPLACE TABLE nclobtable ( nclob_column VARCHAR,
empty_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO nclobtable
VALUES ( 'THIS IS A TEST', TO_VARCHAR(' - '));
Copy

Abrufen von Daten

Oracle
SELECT * FROM nclobtable;
Copy
Ergebnis

NCLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

Snowflake
SELECT * FROM
nclobtable;
Copy
Ergebnis

NCLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

-

Bekannte Probleme

1. The difference in max length CLOB (Oracle) and VARCHAR (Snowflake)

Die maximale Größe einer Oracle NCLOB Spalte ist (4 Gigabyte - 1) * (Datenbankblockgröße) , aber Snowflake VARCHAR ist auf 16MB begrenzt.

2. Empty value with EMPTY_CLOB

Die Initialisierung einer Spalte mit EMPTY_CLOB() gibt einen leeren LOB Locator zurück. Nach der Übersetzung wird die Spalte eine Zeichenfolge mit „-“ zurückgeben.

3. No access to the DBMS_LOB built-in package

Da LOB-Datentypen in Snowflake nicht unterstützt werden, gibt es kein Äquivalent für die DBMS_LOB-Funktionen und es sind noch keine Umgehungsmöglichkeiten implementiert.

Zugehörige EWIs

Keine zugehörigen EWIs.