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

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

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

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

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

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

Definitionen von Objekttypen

Anerkannt.

Teilweise übersetzt.

Ja.

Definitionen von Untertypen

Anerkannt.

Nicht übersetzt.

Nein.

Definitionen von Array-Typen

Anerkannt.

Nicht übersetzt.

Ja.

Definitionen von verschachtelten Tabellen

Anerkannt.

Nicht übersetzt.

Nein.

Definitionen von Mitgliederfunktionen

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

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

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

  1. SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.

  2. [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));
Copy
Snowflake
INSERT INTO table_member_function_demo (column1)
SELECT OBJECT_CONSTRUCT('a1', 5);
Copy

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

GET_SQUARE()

25

Bekannte Probleme

Keine bekannten Probleme.

Zugehörige EWIs

  1. [SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.

  2. SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.

  3. [SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.

  4. 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>
Copy

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

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

  1. [SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend

  2. [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 } , ...]);
Copy

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'));
Copy
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 ***/!!!);
Copy

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;
Copy
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;
Copy
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')));
Copy
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 ***/!!!);
Copy

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

  1. [SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.

  2. SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.

  3. [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 } , ...]);
Copy

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

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

  1. [SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.

  2. [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.