SnowConvert AI – Oracle – Create Type¶
This is a translation reference to convert Oracle Create Type Statements (UDTs) to snowflake
Allgemeine Beschreibung¶
SnowConvert translates many Oracle CREATE TYPE statements to Snowflake native user-defined types where the shape is supported—for example object types with attributes, VARRAY mapped to Snowflake ARRAY, and nested table types mapped to ARRAY of the element type. Unsupported options (subtype inheritance, member bodies, incomplete types, and others) are flagged with Oracle-specific EWIs; see Related EWIs and the issues reference.
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
Einschränkungen¶
Snowflake supports native user-defined types (CREATE TYPE … AS OBJECT, ARRAY, etc.) as documented in the SQL data types overview. SnowConvert maps many Oracle type definitions to those native types. Patterns that still have no or partial mapping—such as subtype inheritance (UNDER), member methods and type bodies, table types, and incomplete forward declarations—may require manual redesign or are reported via EWIs (for example SSC-EWI-OR0139 through SSC-EWI-OR0142). Semi-structured Data Types remain relevant for legacy scenarios that still use VARIANT in converted code.
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.
Typeneigenschaften¶
Diese beziehen sich auf die Optionen, die normalerweise bei der Verwendung von OOP in PL/SQL verwendet werden: Persistable, Instantiable und Final.
Verschachtelter Tabellentyp¶
Diese Anweisungen werden von Snowflake nicht unterstützt. SnowConvert AI erkennt sie nur, aber es wird keine Übersetzung angeboten.
Optionen für die Erstellung von Typquellen¶
Diese Optionen stehen für benutzerdefinierte Optionen für den Zugriff und die Abfrage des Typs.
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¶
The next table shows a summary of the current support provided by the SnowConvert AI tool. Please keep in mind that translations may still not be final, and more work may be needed.
Element der Type-Anweisung |
Aktueller Anerkennungsstatus |
Aktueller Übersetzungsstatus |
Hat bekannte Problemumgehungen |
|---|---|---|---|
Anerkannt. |
Translated to Snowflake |
Ja. |
|
Anerkannt. |
Nicht übersetzt. |
Nein. |
|
Anerkannt. |
Translated to Snowflake |
Ja. |
|
Anerkannt. |
Translated to Snowflake |
Limited. |
|
Anerkannt. |
Nicht übersetzt. |
Ja. |
Bekannte Probleme¶
1. DML usages for Object Types — partial support¶
DDL definitions for User-Defined Types are translated to native Snowflake CREATE TYPE … AS OBJECT / … AS ARRAY where the shape is supported. Constructor calls (for example address_type('123 Main St', …) for object types and VARRAY_TYPE('a', 'b', 'c') for VARRAY / nested-table types) are now also translated to OBJECT_CONSTRUCT(…) :: <type> and ARRAY_CONSTRUCT(…) :: <type> respectively, in INSERT … VALUES, INSERT … SELECT, UPDATE … SET, top-level SELECT, and PL/SQL variable initialization. DML that relies on object-type member functions or other Oracle-specific UDT operations may still require manual review; an SSC-EWI-0073 is emitted in those cases.
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¶
This is a translation reference to convert the Array Variant of the Oracle Create Type Statements (UDTs) to Snowflake
Bemerkung
Oracle VARRAY types are translated to Snowflake CREATE TYPE … AS ARRAY ( element_type ). Fixed varray capacity is not preserved; see SSC-FDM-0043. Column usages may still be migrated to VARIANT in older or mixed scenarios—verify generated DDL for your workload.
VARRAY and nested-table constructor calls (for example phone_list_typ_demo('2000-0000', '4000-0000')) used in INSERT, UPDATE and top-level SELECT are translated to ARRAY_CONSTRUCT(...) :: <type_name>. See VARRAY constructor calls in DML below.
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).
For many workloads, the type definition is emitted as a Snowflake native ARRAY type. Usages in tables and PL/SQL may still involve Semi-structured Data Types or OBJECT depending on context.
Beispielhafte Quellcode-Muster¶
Einfügungen für die Verwendung des Arrays¶
VARRAY and nested-table constructor calls used in INSERT … VALUES, INSERT … SELECT, UPDATE and top-level SELECT are translated to ARRAY_CONSTRUCT(...) and explicitly cast to the original UDT name with :: <type>, so column type checks against the UDT continue to succeed.
Oracle¶
Snowflake¶
VARRAY constructor calls in DML¶
The translator handles standalone constructor calls in INSERT … VALUES, INSERT … SELECT, UPDATE … SET, and top-level SELECT statements. For nested-table types defined with CREATE TYPE … AS TABLE OF … the same ARRAY_CONSTRUCT(...) :: <type> shape is produced.
Oracle¶
Snowflake¶
Oracle (top-level SELECT)¶
Snowflake¶
Verwendung des Array-Typs¶
Oracle¶
Ergebnisse¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[[‚2000-0000‘,‘4000-0000‘,‘0000-0000‘]] |
1 |
[[‚8000-2000‘,‘0000-0000‘,‘5000-0000‘]] |
Snowflake¶
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¶
This is a translation reference to convert the Member Functions of the Oracle Create Type Statements (UDTs) to 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¶
Snowflake¶
Einfache Square()-Member-Funktion¶
Oracle¶
Ergebnisse¶
T.COLUMN1.GET_SQUARE() |
|---|
25 |
Snowflake¶
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¶
This is a translation reference to convert the Nested Table Variant of the Oracle Create Type Statements (UDTs) to Snowflake
Bemerkung
Standalone CREATE TYPE … AS TABLE OF element_type is translated to Snowflake CREATE TYPE … AS ARRAY ( element_type ) when the element type is supported. Nested tables used as table columns may still require manual review depending on DML and PL/SQL usage.
Beschreibung¶
Nested Table Types define an embedded table structure of a previously existing datatype (including other Custom Types). They are closely related to Array Type definitions; SnowConvert maps many patterns to Snowflake ARRAY.
Beispielhafte Quellcode-Muster¶
Verwendung des verschachtelten Tabellentyps¶
Oracle¶
Snowflake¶
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¶
This is a translation reference to convert the Object Variant of the Oracle Create Type Statements (UDTs) to 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.
For the translation of object types, the type definition is mapped to Snowflake’s native CREATE TYPE … AS OBJECT (…) where the attribute list is supported, and constructor calls to the type are translated to OBJECT_CONSTRUCT(<field>, <value>, …) :: <type_name>. SnowConvert AI uses the symbol table to recover the field names from the original CREATE TYPE, so positional constructor arguments are mapped to the correct field names in upper-case. When the type symbol cannot be resolved (for example, because the CREATE TYPE is not part of the migrated source set), the constructor call is preserved and an SSC-EWI-0073 is emitted for manual review.
For legacy or partially-supported scenarios where the object type cannot be expressed natively, the column in dependent tables may still be migrated to VARIANT and an auxiliary view is added so that downstream SELECTs and views to the original table continue to work.
Beispielhafte Quellcode-Muster¶
Object Type constructor calls¶
Object-type constructor calls are translated to OBJECT_CONSTRUCT('FIELD1', value1, 'FIELD2', value2, …) :: <type_name>. The cast to the original UDT name is preserved so column type checks and downstream OBJECT_INSERT / member access continue to work without changes. The transformation applies to constructor calls inside variable initialization, INSERT … VALUES, INSERT … SELECT, UPDATE … SET, and top-level SELECT expressions.
Bemerkung
Field names in the generated OBJECT_CONSTRUCT keys are always upper-case (for example 'NAME', 'AGE'). Snowflake object key lookups are case-sensitive, so downstream references using lowercase or mixed-case semi-structured path syntax (for example obj:name) will return NULL. Use the exact upper-case key or quote it consistently throughout the migrated code.
Oracle¶
Snowflake¶
Oracle (constructor in INSERT … VALUES and UPDATE … SET)¶
Snowflake¶
Oracle (constructor when the type symbol is not in the migrated source)¶
Snowflake¶
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¶
Snowflake¶
Verwendung von einfachen Typen¶
Oracle¶
Ergebnisse¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[1, First Name 1, Last Name 1] |
2 |
[2, First Name 2, Last Name 2] |
Snowflake¶
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¶
Snowflake¶
Verwendung des verschachtelten Typs¶
Oracle¶
Ergebnisse¶
CUSTOMER_ID |
CUSTOMER_DATA |
|---|---|
1 |
[Customer 1, [email@domain.com]] |
2 |
[Customer 2, [email2@domain.com]] |
Snowflake¶
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 — partial support¶
Constructor calls to object types (for example address_type('123 Main St', …)) and to collection types (VARRAY and nested-table) are now translated automatically when they appear in INSERT … VALUES, INSERT … SELECT, UPDATE … SET, and top-level SELECT expressions, as well as in PL/SQL variable initialization. See Object Type constructor calls above. Other DML shapes that depend on object-type member functions or implicit type promotion may still require manual review.
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¶
This is a translation reference to convert the Subtype Variant of the Oracle Create Type Statements (UDTs) to 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.
Beispielhafte Quellcode-Muster¶
Subtypen unter einem Objekttyp¶
Oracle¶
Snowflake¶
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.