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,NVARCHAR2undRAWangeben. Sie können steuern, ob Ihre Datenbank diese neue maximale Größe unterstützt, indem Sie den InitialisierungsparameterMAX_STRING_SIZEsetzen.Ein
VARCHAR2- oderNVARCHAR2-Datentyp mit einer deklarierten Größe von mehr als 4000 Bytes oder einRAW- 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
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;
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;
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;
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;
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¶
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 vonVARCHAR2-Spalten. Sie könnenLONGSpalten verwenden, um lange Textzeichenfolgen zu speichern. Die Länge der Werte vonLONGkann durch den auf Ihrem Computer verfügbaren Speicher begrenzt sein. (Oracle SQL Language Reference Long Data Type)
LONG
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');
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');
Abrufen von Daten aus einer Long-Spalte¶
Oracle¶
SELECT long_column FROM long_table;
Ergebnis¶
LONG_COLUMN |
|---|
this is a text |
Snowflake¶
SELECT long_column FROM
long_table;
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);
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¶
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
Datentypen RAW und LONG RAW¶
Beschreibung¶
Die Datentypen
RAWundLONGRAWspeichern 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) }
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')
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');
Abrufen von Daten aus der Raw- und Long Raw-Spalte¶
Oracle¶
SELECT * FROM raw_table ORDER BY id;
Ergebnis¶
ID |
RAW_COLUMN |
LONG_RAW_COLUMN |
|---|---|---|
1 |
ªº««««© 2 B7 :ºººº«ºª»¬ßý |
|
2 |
ªªªªª |
«««««««««««««««««««ªººªºººººººººº |
3 |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
Snowflake¶
SELECT * FROM
raw_table
ORDER BY id;
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
FLOATist ein Subtyp des DatentypsNUMBER. 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);
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);
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;
Ergebnis¶
col1 |
|---|
100.55555 |
1.9 |
Snowflake¶
SELECT col1 FROM
float_data_type_table;
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;
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;
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
NUMBERspeichert 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. JederNUMBERWert 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:
pist 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.sist 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);
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);
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;
Ergebnis¶
col1 |
|---|
100 |
Snowflake¶
SELECT col1 FROM
number_data_type_table;
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;
Ergebnis¶
col2 |
|---|
2 |
Snowflake¶
SELECT col2 FROM
number_data_type_table;
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;
Ergebnis¶
col3 |
|---|
12345.12345 |
Snowflake¶
SELECT col3 FROM
number_data_type_table;
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;
Ergebnis¶
col4 |
|---|
16400 |
17600 |
Snowflake¶
SELECT col4 FROM
number_data_type_table;
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;
Ergebnis¶
col5 |
|---|
0.00009 |
0.00002 |
0.01268 |
Snowflake¶
SELECT col5 FROM
number_data_type_table;
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);
}
}';
Zugehörige EWIs¶
SSC-EWI-OR0092 Negative Skalierung des Number-Datentyps wurde aus der Ausgabe entfernt.
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
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_DOUBLEist ein 64-Bit-Datentyp mit doppelter Genauigkeit für Gleitkommazahlen. JederBINARY_DOUBLEWert benötigt 8 Bytes. In einerBINARY_DOUBLESpalte haben Gleitkommazahlen eine binäre Genauigkeit. Die binären Gleitkommazahlen unterstützen die speziellen Werte Unendlich undNaN(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');
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');
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;
Ergebnis¶
col1 |
|---|
0 |
179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
NaN |
Snowflake¶
SELECT * FROM
binary_double_data_type_table;
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_FLOATist ein 32-Bit-Datentyp mit einfacher Genauigkeit für Gleitkommazahlen. JederBINARY_FLOATWert benötigt 4 Bytes. In einerBINARY_FLOATSpalte haben Gleitkommazahlen eine binäre Genauigkeit. Die binären Gleitkommazahlen unterstützen die Sonderwerte Unendlich undNaN(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');
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');
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;
Ergebnis¶
col1 |
|---|
0 |
340282001837565600000000000000000000000 |
NaN |
Snowflake¶
SELECT * FROM binary_float_data_type_table;
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,TIMESTAMPWITHTIMEZONEundTIMESTAMPWITHLOCALTIMEZONE. Werte von datetime-Datentypen werden manchmal auch datetimes genannt. Die interval-Datentypen sindINTERVALYEARTOMONTHundINTERVALDAYTOSECOND. 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');
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');
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');
Abrufen von Daten aus einer Datumsspalte¶
Oracle¶
SELECT date_col FROM date_table;
Ergebnis¶
DATE_COL |
|---|
2010-10-10 00:00:00.000 |
Snowflake¶
SELECT date_col FROM
date_table;
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';
Zugehörige EWIs¶
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)]
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) );
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');
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;
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;
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¶
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
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 );
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');
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;
Ergebnis¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1-2 |
|
1000-11 |
Snowflake¶
SELECT * FROM
interval_year_to_month_table;
Ergebnis¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1y, 2m |
|1000y, 11m |
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)]
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');
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');
Abrufen von Daten aus einer Zeitstempelspalte¶
Oracle¶
SELECT * FROM timestamp_table;
Ergebnis¶
TIMESTAMP_COL1 |
TIMESTAMP_COL2 |
|---|---|
2010-10-10 12:00:00.000 |
2010-10-10 12:00:00.000 |
Snowflake¶
SELECT * FROM
timestamp_table;
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
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');
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');
Abrufen von Daten aus einer Spalte Zeitstempel mit lokaler Zeitzone¶
Oracle¶
SELECT * FROM timestamp_with_local_time_zone_table;
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;
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;
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;
Snowflake¶
SELECT dbtimezone FROM dual;
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';
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');
Snowflake¶
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
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
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');
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');
Abrufen von Daten aus einer Spalte Zeitstempel mit Zeitzone¶
Oracle¶
SELECT * FROM timestamp_with_time_zone_table;
Ergebnis¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0600 |
Snowflake¶
SELECT * FROM
timestamp_with_time_zone_table;
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;
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');
Snowflake¶
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
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'));
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'));
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 |
Zahl + Gleitkomma |
|
Intervall |
Datum + Intervall IntervalUnit |
Zeitstempel + Intervall IntervalUnit |
INVALID |
Unbekannt + Intervall IntervalUnit |
INVALID |
|
Unbekannt |
DATEADD_UDF |
DATEADD_UDF |
Unbekannt + Zahl |
Unbekannt + Intervall IntervalUnit |
||
Gleitkomma |
DATEADD_UDF |
DATEADD_UDF |
Gleitkomma + Zahl |
INVALID |
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;
Ergebnis¶
SQL Error [975] [42000]: ORA-00975: date + date not allowed
SQL Error [30087] [99999]: ORA-30087: Adding two datetime values is not allowed
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;
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;
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;
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;
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;
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;
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 |
Zahl - Gleitkomma |
|
Intervall |
INVALID |
INVALID |
INVALID |
Unbekannt - Intervall IntervalUnit |
NOT SUPPORTED IN ORACLE |
|
Unbekannt |
DATEDIFF_UDF |
DATEDIFF_UDF |
Unbekannt - Intervall IntervalUnit |
|||
Gleitkomma |
DATEDIFF_UDF |
DATEDIFF_UDF |
Gleitkomma - Zahl |
NOT SUPPORTED IN ORACLE |
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;
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
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;
Ergebnis¶
ASDATE-ASDATETWO |
|---|
1 |
Snowflake¶
SELECT AsDate - AsDateTwo FROM
TIMES;
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;
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;
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;
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;
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;
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;
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;
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;
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;
Snowflake¶
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
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;
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;
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;
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;
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¶
SSC-EWI-0108: Die folgende Unterabfrage stimmt mit mindestens einem der Muster überein, die als ungültig angesehen werden und kann Kompilierungsfehler verursachen.
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.')
);
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.')
);
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;
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;
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;
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¶
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_INTEGERspeichert 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:
NATURALNATURALNPOSITIVEPOSITIVENSIGNTYPESIMPLE_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
);
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;
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;
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
CHARgibt 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 ]) ]
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');
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');
Abrufen von Daten aus Char-Spalten¶
Oracle¶
SELECT * FROM char_data_types;
Ergebnis¶
CHAR_COLUMN1 |
CHAR_COLUMN2 |
CHAR_COLUMN3 |
CHAR_COLUMN4 |
|---|---|---|---|
H |
Hello world |
Hello world |
Hello world |
Snowflake¶
SELECT * FROM
char_data_types;
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;
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;
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¶
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) ]
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 ('ភ', 'ភាសាខ');
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 ('ភ', 'ភាសាខ');
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;
Ergebnis¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
Snowflake¶
SELECT * FROM
nchar_data_types;
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;
Ergebnis¶
LENGTHB(NCHAR_COLUMN1) |
LENGTHB(NCHAR_COLUMN2) |
|---|
2| 10|
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;
Ergebnis¶
OCTET_LENGTH(NCHAR_COLUMN1) |
OCTET_LENGTH(NCHAR_COLUMN2) |
|---|
3| 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ö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¶
SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.
NVARCHAR2-Datentyp¶
Beschreibung¶
Der Datentyp
NVARCHAR2spezifiziert eine Zeichenfolge mit einer variablen Länge im nationalen Zeichensatz. (Oracle SQL Language Reference NVARCHAR2)
NVARCHAR2 (size)
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)
Beispielhafte Quellcode-Muster¶
Nvarchar2-Datentyp in Create Table¶
Oracle¶
CREATE TABLE nvarchar2_data_types
(
nvarchar2_column NVARCHAR2 (5)
);
INSERT INTO nvarchar2_data_types VALUES ('ភាសាខ');
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 ('ភាសាខ');
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;
Ergebnis¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Snowflake¶
SELECT * FROM
nvarchar2_data_types;
Ergebnis¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Abrufen der Größe jeder Spalte in Bytes¶
Oracle¶
SELECT
LENGTHB(nvarchar2_column)
FROM nvarchar2_data_types;
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;
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¶
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
VARCHAR2spezifiziert 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 ])
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');
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');
Abrufen von Daten aus Varchar-Spalten¶
Oracle¶
SELECT * FROM varchar2_data_types;
Ergebnis¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Hello |
Hell |
Snowflake¶
SELECT * FROM
varchar2_data_types;
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;
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;
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¶
SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.
LOB-Datentypen¶
Beschreibung¶
Die integrierten LOB-Datentypen
BLOB,CLOBundNCLOB(intern gespeichert) undBFILE(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
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
BFILESpalte oder ein Attribut speichert einenBFILELocator, 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;
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;
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
$$;
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¶
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
BLOBspeichert unstrukturierte binäre große Objekte.BLOBObjekte 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());
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(' '));
Abrufen von Daten¶
Oracle¶
SELECT * FROM blobtable;
Ergebnis¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
[NULL] |
[BLOB] |
Snowflake¶
SELECT * FROM
blobtable;
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;
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;
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¶
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() );
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(' - '));
Abrufen von Daten¶
Oracle¶
SELECT * FROM clobtable;
Ergebnis¶
CLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
SELECT * FROM
clobtable;
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() );
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(' - '));
Abrufen von Daten¶
Oracle¶
SELECT * FROM nclobtable;
Ergebnis¶
NCLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
SELECT * FROM
nclobtable;
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.