SnowConvert AI – Oracle – Create Type¶
Dies ist eine Übersetzungsreferenz für die Konvertierung von Create Type-Anweisungen (UDT) von Oracle in Snowflake
Allgemeine Beschreibung¶
Eines der wichtigsten Features der Oracle-Datenbank-Engine ist ihr objektorientierter Ansatz. PL/SQL bietet Funktionen, die über andere relationale Datenbanken hinausgehen, in Form von OOP durch Verwendung von Java-ähnlichen -Anweisungen in Form von Paketen, Funktionen, Tabellen und Typen. Dieses Dokument behandelt den letzten Punkt und wie SnowConvert AI ihn löst, wobei die Funktionalität erhalten bleibt.
Oracle unterstützt die folgenden Spezifikationen:
Abstrakter Datentyp (ADT) (inklusive eines SQLJ-Objekttyps).
Eigenständiger variabler Array (varray)-Typ.
Eigenständiger verschachtelter Tabellentyp.
Unvollständiger Objekttyp.
All dies entspricht den Informationen in der Dokumentation zur Oracle CREATE TYPE-Anweisung
CREATE [ OR REPLACE ] [ EDITIONABLE | NONEDITIONAL ] TYPE <type name>
[ <type source creation options> ]
[<type definition>]
[ <type properties> ]
Einschränkungen¶
Laut der Online-Dokumentation Nicht unterstützte Datentypen unterstützt Snowflake keine benutzerdefinierten Datentypen, aber es unterstützt semistrukturierte Datentypen, mit denen Sie die hierarchieähnliche Struktur der meisten benutzerdefinierten Typen nachahmen können. Aus diesem Grund gibt es mehrere Features, für die es keine Umgehungsmöglichkeit gibt.
Nachfolgend sind die Features der benutzerdefinierten Typen aufgeführt, für die NO eine Umgehungsmöglichkeit vorschlägt:
Untertypen: Typenhierarchie¶
Diese Anweisungen werden von Snowflake nicht unterstützt. SnowConvert AI erkennt sie nur, aber es wird keine Übersetzung angeboten.
CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn NUMBER)
NOT FINAL;
/
CREATE TYPE employee_t UNDER person_t
(department_id NUMBER, salary NUMBER)
NOT FINAL;
/
CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs NUMBER);
/
Typeneigenschaften¶
Diese beziehen sich auf die Optionen, die normalerweise bei der Verwendung von OOP in PL/SQL verwendet werden: Persistable, Instantiable und Final.
CREATE OR REPLACE TYPE type1 AS OBJECT () NOT FINAL NOT INSTANTIABLE NOT PERSISTABLE;
CREATE OR REPLACE TYPE type2 AS OBJECT () FINAL INSTANTIABLE PERSISTABLE;
Verschachtelter Tabellentyp¶
Diese Anweisungen werden von Snowflake nicht unterstützt. SnowConvert AI erkennt sie nur, aber es wird keine Übersetzung angeboten.
CREATE TYPE textdoc_typ AS OBJECT
( document_typ VARCHAR2(32)
, formatted_doc BLOB
) ;
/
CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
/
Optionen für die Erstellung von Typquellen¶
Diese Optionen stehen für benutzerdefinierte Optionen für den Zugriff und die Abfrage des Typs.
CREATE TYPE type1 FORCE OID 'abc' SHARING = METADATA DEFAULT COLLATION schema1.collation ACCESSIBLE BY (schema1.unitaccesor) AS OBJECT ();
CREATE TYPE type2 FORCE OID 'abc' SHARING = NONE DEFAULT COLLATION collation ACCESSIBLE BY (PROCEDURE unitaccesor) AS OBJECT ();
CREATE TYPE type3 AUTHID CURRENT_USER AS OBJECT ();
CREATE TYPE type4 AUTHID DEFINER AS OBJECT ();
Vorgeschlagene Umgehungsmöglichkeiten¶
Über Typendefinition¶
Für die Definition wird vorgeschlagen, einen semistrukturierten Datentyp zu erstellen, der den Datentyp von Oracle nachahmt.
Über Typ-Member-Funktionen¶
Für Member-Funktionen, die Logik und DML enthalten, stützt sich die vorgeschlagene Umgehungsmöglichkeit auf Hilfsfunktionen, die diese in gespeicherte Prozeduren übersetzen.
Aktuelle Unterstützung von SnowConvert AI¶
Die nächste Tabelle zeigt eine Zusammenfassung der aktuellen Unterstützung, die vom SnowConvert AI Tool bereitgestellt wird. Beachten Sie, dass die Übersetzungen möglicherweise noch nicht endgültig sind und möglicherweise weitere Arbeit erforderlich ist.
Element der Type-Anweisung |
Aktueller Anerkennungsstatus |
Aktueller Übersetzungsstatus |
Hat bekannte Problemumgehungen |
|---|---|---|---|
Anerkannt. |
Teilweise übersetzt. |
Ja. |
|
Anerkannt. |
Nicht übersetzt. |
Nein. |
|
Anerkannt. |
Nicht übersetzt. |
Ja. |
|
Anerkannt. |
Nicht übersetzt. |
Nein. |
|
Anerkannt. |
Nicht übersetzt. |
Ja. |
Bekannte Probleme¶
1. DML usages for Object Types are not being transformed¶
Ab sofort werden nur noch DDL-Definitionen, die benutzerdefinierte Typen verwenden, in Varianten umgewandelt. Das bedeutet, dass alle Einfügungen, Aktualisierungen oder Löschungen, die benutzerdefinierte Typen verwenden, nicht transformiert werden und manuell transformiert werden müssen. Es gibt keine EWI dafür, aber es gibt ein Work-Element, um dies entsprechend EWI hinzuzufügen.
2. Create Type creation options are not supported¶
Derzeit gibt es für keine der Erstellungsoptionen eine bekannte Umgehungsmöglichkeit, daher werden sie bei der Definition des Typs nicht berücksichtigt.
Definition des Array-Typs¶
Dies ist eine Übersetzungsreferenz für die Konvertierung der Array-Variante der Create Type-Anweisungen (UDT) von Oracle in Snowflake
Gefahr
SnowConvert AI erkennt nur diese Definitionen und unterstützt im Moment keine Übersetzung für sie. Diese Seite wird nur als zukünftige Referenz für Übersetzungen verwendet.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Array-Typen definieren eine Array-Struktur eines bereits vorhandenen Datentyps (einschließlich anderer benutzerdefinierter Typen).
Bei der Übersetzung von Array-Typen wird die Typdefinition durch einen semistrukturierten Datentyp ersetzt und dann bei jeder Verwendung im Code erweitert. Das bedeutet, dass Sie die Definition eines Typs nehmen und sie dann auf den ursprünglichen Code erweitern.
CREATE TYPE <type name>
AS { VARRAY | [VARYING] ARRAY } ( <size limit> ) OF <data type>
Beispielhafte Quellcode-Muster¶
Einfügungen für die Verwendung des Arrays¶
Die nächsten Daten werden in die Tabelle eingefügt, bevor die Abfrage des Select erfolgt. Bitte beachten Sie, dass diese Inserts derzeit manuell in Snowflake migriert werden müssen.
Oracle¶
INSERT INTO customer_table_demo(customer_table_id, customer_data) VALUES
(1, phone_list_typ_demo('2000-0000', '4000-0000', '0000-0000'));
INSERT INTO customer_table_demo(customer_table_id, customer_data) VALUES
(1, phone_list_typ_demo('8000-2000', '0000-0000', '5000-0000'));
Snowflake¶
INSERT INTO customer_table_demo(customer_table_id, customer_data)
SELECT 1, ARRAY_CONSTRUCT('2000-0000', '4000-0000', '0000-0000');
INSERT INTO customer_table_demo(customer_table_id, customer_data)
SELECT 1, ARRAY_CONSTRUCT('8000-2000', '0000-0000', '5000-0000');
Verwendung des Array-Typs¶
Oracle¶
CREATE TYPE phone_list_typ_demo AS VARRAY(3) OF VARCHAR2(25);
/
CREATE TABLE customer_table_demo (
customer_table_id INTEGER,
customer_data phone_list_typ_demo
);
/
SELECT * FROM customer_table_demo;
/
Ergebnisse¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[[‚2000-0000‘,‘4000-0000‘,‘0000-0000‘]] |
1 |
[[‚8000-2000‘,‘0000-0000‘,‘5000-0000‘]] |
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'VARYING ARRAY' NODE ***/!!!
CREATE TYPE phone_list_typ_demo AS VARRAY(3) OF VARCHAR2(25);
CREATE OR REPLACE TABLE customer_table_demo (
customer_table_id INTEGER,
customer_data VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'phone_list_typ_demo' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE VIEW PUBLIC.customer_table_demo_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "" }}'
AS
SELECT
customer_table_id,
customer_data
FROM
customer_table_demo;
SELECT * FROM
customer_table_demo_view;
Ergebnisse¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[[‚2000-0000‘, ‚4000-0000‘, ‚0000-0000‘]] |
1 |
[[‚8000-2000‘, ‚0000-0000‘, ‚5000-0000‘]] |
Bekannte Probleme¶
1. Create Type creation options are not supported¶
Derzeit gibt es für keine der Erstellungsoptionen eine bekannte Umgehungsmöglichkeit, daher werden sie bei der Definition des Typs nicht berücksichtigt.
2. Migrated code output is not functional¶
Die Anweisungen werden unnötigerweise geändert, so dass sie im Ausgabecode nicht mehr funktional sind. Dies wird in Angriff genommen werden, wenn eine angemessene Transformation für sie erfolgt ist.
Zugehörige EWIs¶
SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
Definitionen der Member-Funktionen¶
Dies ist eine Übersetzungsreferenz für die Konvertierung der Member-Funktionen der Create Type-Anweisungen (UDT) von Oracle in Snowflake
Gefahr
SnowConvert AI erkennt immer noch keine Definitionen für Member-Funktionen oder Typtext. Diese Seite wird nur als zukünftige Referenz für Übersetzungen verwendet.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Wie andere Klassendefinitionen kann Oracle TYPE-Methoden implementieren, um Verhaltensweisen auf der Grundlage seiner Attribute zu zeigen. MEMBER FUCTION werden in gespeicherte Prozeduren von Snowflake umgewandelt, um aufgrund von Beschränkungen die Funktionsäquivalenz zu gewährleisten.
Da Funktionen in Prozeduren umgewandelt werden, gilt auch hier die Transformationsreferenz für PL/SQL.
Beispielhafte Quellcode-Muster¶
Einfügungen für einfache Square()-Member-Funktionen¶
Die nächsten Daten werden in die Tabelle eingefügt, bevor die Abfrage des Select erfolgt. Bitte beachten Sie, dass diese Inserts derzeit manuell in Snowflake migriert werden müssen.
Oracle¶
INSERT INTO table_member_function_demo(column1) VALUES
(type_member_function_demo(5));
Snowflake¶
INSERT INTO table_member_function_demo (column1)
SELECT OBJECT_CONSTRUCT('a1', 5);
Einfache Square()-Member-Funktion¶
Oracle¶
-- TYPE DECLARATION
CREATE TYPE type_member_function_demo AS OBJECT (
a1 NUMBER,
MEMBER FUNCTION get_square RETURN NUMBER
);
/
-- TYPE BODY DECLARATION
CREATE TYPE BODY type_member_function_demo IS
MEMBER FUNCTION get_square
RETURN NUMBER
IS x NUMBER;
BEGIN
SELECT c.column1.a1*c.column1.a1 INTO x
FROM table_member_function_demo c;
RETURN (x);
END;
END;
/
-- TABLE
CREATE TABLE table_member_function_demo (column1 type_member_function_demo);
/
-- QUERYING DATA
SELECT
t.column1.get_square()
FROM
table_member_function_demo t;
/
Ergebnisse¶
T.COLUMN1.GET_SQUARE() |
|---|
25 |
Snowflake¶
-- TYPE DECLARATION
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type_member_function_demo AS OBJECT (
a1 NUMBER,
MEMBER FUNCTION get_square RETURN NUMBER
)
;
---- TYPE BODY DECLARATION
--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE WITHOUT BODY IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE BODY type_member_function_demo IS
-- MEMBER FUNCTION get_square
-- RETURN NUMBER
-- IS x NUMBER;
-- BEGIN
-- SELECT c.column1.a1*c.column1.a1 INTO x
-- FROM table_member_function_demo c;
-- RETURN (x);
-- END;
--END
;
-- TABLE
CREATE OR REPLACE TABLE table_member_function_demo (column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'type_member_function_demo' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE VIEW PUBLIC.table_member_function_demo_view
<strong>COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "" }}'
</strong><strong>AS
</strong>SELECT
column1:a1 :: NUMBER AS a1
FROM
table_member_function_demo;
-- QUERYING DATA
SELECT
t.column1.get_square() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 't.column1.get_square' NODE ***/!!!
FROM
table_member_function_demo t;
Ergebnisse¶
GET_SQUARE() |
|---|
25 |
Bekannte Probleme¶
Keine bekannten Probleme.
Zugehörige EWIs¶
[SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.
SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
SSC-EWI-OR0007: Erstellungstyp wird in Snowflake nicht unterstützt
Typdefinition für verschachtelte Tabellen¶
Dies ist eine Übersetzungsreferenz für die Konvertierung der Variante für verschachtelte Tabellen der Create Type-Anweisungen (UDT) von Oracle in Snowflake
Gefahr
SnowConvert AI erkennt nur diese Definitionen, unterstützt keine Übersetzung und es gibt keine bekannte Problemumgehung für sie.
Beschreibung¶
Verschachtelte Tabellentypen definieren eine eingebettete Tabellenstruktur eines bereits vorhandenen Datentyps (einschließlich anderer benutzerdefinierter Typen). Sie können als eine leistungsfähigere Version des Array-Typs verwendet werden.
Im Gegensatz zu den anderen Typen gibt es für diese noch keine bekannte Umgehungsmöglichkeit oder eine mögliche Übersetzung.
CREATE TYPE <type name> AS TABLE OF <data type>
Beispielhafte Quellcode-Muster¶
Verwendung des verschachtelten Tabellentyps¶
Oracle¶
CREATE TYPE textdoc_typ AS OBJECT (
document_typ VARCHAR2(32),
formatted_doc BLOB
);
/
CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
/
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE textdoc_typ AS OBJECT (
document_typ VARCHAR2(32),
formatted_doc BLOB
)
;
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'NESTED TABLE' NODE ***/!!!
CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
Bekannte Probleme¶
1. Create Type creation options are not supported¶
Derzeit gibt es für keine der Erstellungsoptionen eine bekannte Umgehungsmöglichkeit, daher werden sie bei der Definition des Typs nicht berücksichtigt.
Zugehörige EWIs¶
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend
[SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.
Definition des Objekttyps¶
Dies ist eine Übersetzungsreferenz für die Konvertierung der Objekt-Variante der Create Type-Anweisungen (UDT) von Oracle in Snowflake
Bemerkung
SnowConvert AI unterstützt eine Übersetzung für Objekttypdefinitionen selbst. Ihre Verwendungen sind jedoch noch in Arbeit.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Objekttypen definieren eine Datenstruktur ähnlich wie ein Datensatz, mit den zusätzlichen Vorteilen der Definitionen von Mitgliedsfunktionen. Das bedeutet, dass ihre Daten für eine bestimmte Verhaltensweise innerhalb des Typs verwendet werden können.
Bei der Übersetzung von Objekttypen wird die Typdefinition durch einen semistrukturierten Datentyp ersetzt, der dann bei jeder Verwendung im Code erweitert wird. Bei Tabellen bedeutet dies, dass Sie die Spalte für eine Variante ersetzen und eine Ansicht hinzufügen, damit Selects (und auch Views) auf die ursprüngliche Tabelle weiterhin funktionieren.
CREATE TYPE <type name> AS OBJECT
( [{<type column definition> | type method definition } , ...]);
Beispielhafte Quellcode-Muster¶
Einfügungen für die Verwendung von einfachen Typen¶
Die nächsten Daten werden in die Tabelle eingefügt, bevor die Abfrage des Select erfolgt. Bitte beachten Sie, dass diese Inserts derzeit manuell in Snowflake migriert werden müssen.
Oracle¶
INSERT INTO customer_table_demo(customer_table_id, customer_data)
VALUES ( 1, customer_typ_demo(1, 'First Name 1', 'Last Name 1'));
INSERT INTO customer_table_demo(customer_table_id, customer_data)
VALUES ( 2, customer_typ_demo(2, 'First Name 2', 'Last Name 2'));
Snowflake¶
INSERT INTO customer_table_demo(customer_table_id, customer_data)
VALUES ( 1, customer_typ_demo(1, 'First Name 1', 'Last Name 1') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'customer_typ_demo' NODE ***/!!!);
INSERT INTO customer_table_demo(customer_table_id, customer_data)
VALUES ( 2, customer_typ_demo(2, 'First Name 2', 'Last Name 2') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'customer_typ_demo' NODE ***/!!!);
Verwendung von einfachen Typen¶
Oracle¶
CREATE TYPE customer_typ_demo AS OBJECT (
customer_id INTEGER,
cust_first_name VARCHAR2(20),
cust_last_name VARCHAR2(20)
);
CREATE TABLE customer_table_demo (
customer_table_id INTEGER,
customer_data customer_typ_demo
);
SELECT * FROM customer_table_demo;
Ergebnisse¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[1, First Name 1, Last Name 1] |
2 |
[2, First Name 2, Last Name 2] |
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE customer_typ_demo AS OBJECT (
customer_id INTEGER,
cust_first_name VARCHAR2(20),
cust_last_name VARCHAR2(20)
)
;
CREATE OR REPLACE TABLE customer_table_demo (
customer_table_id INTEGER,
customer_data VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'customer_typ_demo' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}}'
;
CREATE OR REPLACE VIEW PUBLIC.customer_table_demo_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "" }}'
AS
SELECT
customer_table_id,
customer_data:customer_id :: INTEGER AS customer_id,
customer_data:cust_first_name :: VARCHAR AS cust_first_name,
customer_data:cust_last_name :: VARCHAR AS cust_last_name
FROM
customer_table_demo;
SELECT * FROM
customer_table_demo_view;
Ergebnisse¶
CUSTOMER_TABLE_ID |
CUST_ID |
CUST_FIRST_NAME |
CUST_LAST_NAME |
|---|---|---|---|
1 |
1 |
First Name 1 |
Last Name 1 |
2 |
2 |
First Name 2 |
Last Name 2 |
Einfügungen für die Verwendung von verschachtelten Typen¶
Diese Anweisungen müssen zwischen der Tabellenerstellung und der SELECT-Anweisung eingefügt werden, um die Ausgabe zu testen.
Oracle¶
INSERT INTO customer_table_demo(customer_id, customer_data) values
(1, customer_typ_demo('Customer 1', email_typ_demo('email@domain.com')));
INSERT INTO customer_table_demo(customer_id, customer_data) values
(2, customer_typ_demo('Customer 2', email_typ_demo('email2@domain.com')));
Snowflake¶
INSERT INTO customer_table_demo(customer_id, customer_data) values
(1, customer_typ_demo('Customer 1', email_typ_demo('email@domain.com') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'email_typ_demo' NODE ***/!!!) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'customer_typ_demo' NODE ***/!!!);
INSERT INTO customer_table_demo(customer_id, customer_data) values
(2, customer_typ_demo('Customer 2', email_typ_demo('email2@domain.com') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'email_typ_demo' NODE ***/!!!) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'customer_typ_demo' NODE ***/!!!);
Verwendung des verschachtelten Typs¶
Oracle¶
CREATE TYPE email_typ_demo AS OBJECT (email VARCHAR2(20));
CREATE TYPE customer_typ_demo AS OBJECT (
cust_name VARCHAR2(20),
cust_email email_typ_demo
);
CREATE TABLE customer_table_demo (
customer_id INTEGER,
customer_data customer_typ_demo
);
SELECT * FROM customer_table_demo;
Ergebnisse¶
CUSTOMER_ID |
CUSTOMER_DATA |
|---|---|
1 |
[Customer 1, [email@domain.com]] |
2 |
[Customer 2, [email2@domain.com]] |
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE email_typ_demo AS OBJECT (email VARCHAR2(20))
;
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE customer_typ_demo AS OBJECT (
cust_name VARCHAR2(20),
cust_email email_typ_demo
)
;
CREATE OR REPLACE TABLE customer_table_demo (
customer_id INTEGER,
customer_data VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'customer_typ_demo' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}}'
;
CREATE OR REPLACE VIEW PUBLIC.customer_table_demo_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "" }}'
AS
SELECT
customer_id,
customer_data:cust_name :: VARCHAR AS cust_name,
customer_data:cust_email:email :: VARCHAR AS email
FROM
customer_table_demo;
SELECT * FROM
customer_table_demo_view;
Ergebnisse¶
CUSTOMER_ID |
CUST_NAME |
CUST_EMAIL |
|---|---|---|
1 |
Customer 1 |
email@domain.com |
2 |
Customer 2 |
email2@domain.com |
Bekannte Probleme¶
1. Migrated code output is not the same¶
Die VIEW-Anweisung wird unnötigerweise geändert, so dass die Tabelle im Ausgabecode nicht mehr dieselbe Verhaltensweise zeigt. Es gibt ein Work-Element zur Behebung dieses Problems.
2. DML for User-defined Types is not being transformed¶
DML die mit Elementen interagieren, die benutzerdefinierte Typen enthalten (wie eine Tabelle), werden nicht umgewandelt. Es gibt ein Work-Element, um dies in Zukunft zu implementieren.
3. Create Type creation options are not supported¶
Derzeit gibt es für keine der Erstellungsoptionen eine bekannte Umgehungsmöglichkeit, daher werden sie bei der Definition des Typs nicht berücksichtigt.
Zugehörige EWIs¶
[SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.
SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
Definition von Subtypen¶
Dies ist eine Übersetzungsreferenz für die Konvertierung der Subtyp-Variante der Create Type-Anweisungen (UDT) von Oracle in Snowflake
Gefahr
Da keine Problemumgehungen bekannt sind, erkennt SnowConvert AI nur diese Definitionen und unterstützt keine Übersetzung für sie.
Beschreibung¶
Subtypen definieren eine Datenstruktur ähnlich wie ein Datensatz, mit den zusätzlichen Vorteilen der Definitionen von Member-Funktionen. Das bedeutet, dass ihre Daten für eine bestimmte Verhaltensweise innerhalb des Typs verwendet werden können. Anders als Objekttypen werden Subtypen als Erweiterung eines anderen bestehenden Typs erstellt.
Für Subtyp-Definitionen gibt es immer noch keine Übersetzung, aber es könnte eine Möglichkeit geben, sie mit Objekttyp-Definitionen neu zu implementieren und dann die entsprechende Übersetzung zu verwenden.
CREATE TYPE <type name> UNDER <super type name>
( [{<type column definition> | type method definition } , ...]);
Beispielhafte Quellcode-Muster¶
Subtypen unter einem Objekttyp¶
Oracle¶
CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn INTEGER)
NOT FINAL;
/
CREATE TYPE employee_t UNDER person_t
(department_id INTEGER, salary INTEGER)
NOT FINAL;
/
CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs INTEGER);
/
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn INTEGER)
NOT FINAL;
--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE employee_t UNDER person_t
-- (department_id INTEGER, salary INTEGER)
-- NOT FINAL
;
--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs INTEGER)
;
Bekannte Probleme¶
1. Create Type creation options are not supported¶
Derzeit gibt es für keine der Erstellungsoptionen eine bekannte Umgehungsmöglichkeit, daher werden sie bei der Definition des Typs nicht berücksichtigt.
Zugehörige EWIs¶
[SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.
[SSC-EWI-OR0007](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI. md#ssc-ewi-or0007): Create-Typ erstellen wird in Snowflake nicht unterstützt.