SnowConvert AI - Oracle - Create Type¶
This is a translation reference to convert Oracle Create Type Statements (UDTs) to snowflake
Description générale¶
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.
L’une des fonctionnalités les plus importantes que propose le moteur de base de données Oracle est une approche orientée objet. PL/SQL offre des capacités au-delà des autres bases de données relationnelles sous la forme de OOP en utilisant des instructions de type Java sous forme de paquets, de fonctions, de tables et de types. Ce document couvre le type et la manière dont SnowConvert AI le résout, en restant conforme à la fonctionnalité.
Oracle prend en charge les spécifications suivantes :
Type de données abstrait (ADT) (y compris un type d’objet SQLJ).
Type de tableau variable autonome (varray).
Type de table imbriquée autonome.
Type d’objet incomplet.
Tout cela d’après les informations trouvées dans la documentation Oracle de l’instruction Create Type
Limitations¶
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.
Vous trouverez ci-dessous les fonctions des types définis par l’utilisateur pour lesquelles NO propose une solution de contournement :
Sous-types : Hiérarchie des types¶
Ces instructions ne sont pas prises en charge dans Snowflake. SnowConvert AI les reconnaît uniquement, mais aucune traduction n’est proposée.
Propriétés de type¶
Il s’agit des options qui sont normalement utilisées lors de l’utilisation de OOP dans PL/SQL : Persistable, Instantiable et Final.
Type de table imbriquée¶
Ces instructions ne sont pas prises en charge dans Snowflake. SnowConvert AI les reconnaît uniquement, mais aucune traduction n’est proposée.
Options de création du type de source¶
Ces options correspondent à des options personnalisées concernant l’accès et la requête du type.
Solutions de contournement proposées¶
À propos de la définition des types¶
Pour la définition, la solution proposée consiste à créer un type de données semi-structurées pour imiter le type de données d’Oracle.
À propos de la fonction membre des types¶
Pour les fonctions membres contenant de la logique et DML, la solution de contournement proposée s’appuie sur des aides pour les traduire en procédures stockées.
Prise en charge actuelle par 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.
Élément d’instruction de type |
Statut de reconnaissance actuel |
Statut actuel de la traduction |
Solutions de contournement connues |
|---|---|---|---|
Reconnu. |
Translated to Snowflake |
Oui. |
|
Reconnu. |
Non traduit. |
Non. |
|
Reconnu. |
Translated to Snowflake |
Oui. |
|
Reconnu. |
Translated to Snowflake |
Limited. |
|
Reconnu. |
Non traduit. |
Oui. |
Problèmes connus¶
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¶
Actuellement, il n’existe pas de solution connue pour l’une ou l’autre des options de création, c’est pourquoi elles ne sont pas prises en compte lors de la définition du type.
Définition du type de tableau¶
This is a translation reference to convert the Array Variant of the Oracle Create Type Statements (UDTs) to Snowflake
Note
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.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Les types de tableau définissent une structure de tableau d’un type de données existant (y compris d’autres types personnalisés).
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.
Modèles d’échantillons de sources¶
Insertions pour l’utilisation du tableau¶
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¶
Utilisation du type de tableau¶
Oracle¶
Résultats¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[[“2000-0000”,”4000-0000”,”0000-0000”]] |
1 |
[[“8000-2000”,”0000-0000”,”5000-0000”]] |
Snowflake¶
Résultats¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[[“2000-0000”, “4000-0000”, “0000-0000”]] |
1 |
[[“8000-2000”, “0000-0000”, “5000-0000”]] |
Problèmes connus¶
1. Create Type creation options are not supported¶
Actuellement, il n’existe pas de solution connue pour l’une ou l’autre des options de création, c’est pourquoi elles ne sont pas prises en compte lors de la définition du type.
2. Migrated code output is not functional¶
Les instructions sont modifiées inutilement, ce qui fait qu’elles ne sont plus fonctionnelles dans le code de sortie. Cette question sera abordée lorsqu’une transformation adéquate sera mise en place.
EWIs connexes¶
SSC-EWI-0062: L’utilisation du type personnalisé a changé en variante.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
Définitions des fonctions membres¶
This is a translation reference to convert the Member Functions of the Oracle Create Type Statements (UDTs) to Snowflake
Danger
SnowConvert AI ne reconnaît toujours pas les fonctions membres ni les définitions de corps de type. Cette page n’est utilisée que comme référence future pour la traduction.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Comme les autres définitions de classe, Oracle TYPE peut mettre en œuvre des méthodes pour exposer des comportements basés sur ses attributs. MEMBER FUCTION sera transformée en procédures stockées de Snowflake, afin de maintenir l’équivalence fonctionnelle en raison des limites.
Étant donné que les fonctions sont transformées en procédures, la référence de transformation pour PL/SQL s’applique également ici.
Modèles d’échantillons de sources¶
Insertions pour la fonction membre Simple square()¶
Les données suivantes seront insérées dans la table avant la requête de sélection. Notez que ces insertions doivent actuellement être migrées manuellement dans Snowflake.
Oracle¶
Snowflake¶
Fonction simple square()¶
Oracle¶
Résultats¶
COLUMN1TGET_SQUARE |
|---|
25 |
Snowflake¶
Résultats¶
GET_SQUARE |
|---|
25 |
Problèmes connus¶
Aucun problème connu.
EWIs connexes¶
SSC-EWI-0056 : Create table n’est pas pris en charge.
SSC-EWI-0062: L’utilisation du type personnalisé a changé en variante.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
SSC-EWI-OR0007: Create Type n’est pas pris en charge dans Snowflake
Définition du type de table imbriquée¶
This is a translation reference to convert the Nested Table Variant of the Oracle Create Type Statements (UDTs) to Snowflake
Note
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.
Description¶
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.
Modèles d’échantillons de sources¶
Utilisation du type de table imbriquée¶
Oracle¶
Snowflake¶
Problèmes connus¶
1. Create Type creation options are not supported¶
Actuellement, il n’existe pas de solution connue pour les options de création ; c’est pourquoi elles ne sont pas prises en compte lors de la définition du type.
EWIs connexes¶
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle
SSC-EWI-0056 : Create table n’est pas pris en charge.
Définition du type d’objet¶
This is a translation reference to convert the Object Variant of the Oracle Create Type Statements (UDTs) to Snowflake
Note
SnowConvert AI prend en charge une traduction pour les définitions de type d’objet elles-mêmes. Cependant, leur utilisation est n’est pas encore prête.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Les types d’objets définissent une structure de données similaire à un enregistrement, avec les avantages supplémentaires des définitions des fonctions membres. Cela signifie que leurs données peuvent être utilisées dans le cadre d’un comportement au sein du type.
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.
Modèles d’échantillons de sources¶
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.
Note
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¶
Insertions pour l’utilisation de types simples¶
Les données suivantes seront insérées dans la table avant la requête de sélection. Notez que ces insertions doivent actuellement être migrées manuellement dans Snowflake.
Oracle¶
Snowflake¶
Utilisation du type simple¶
Oracle¶
Résultats¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[1, Prénom 1, Nom 1] |
2 |
[2, Prénom 2, Nom 2] |
Snowflake¶
Résultats¶
CUSTOMER_TABLE_ID |
CUST_ID |
CUST_FIRST_NAME |
CUST_LAST_NAME |
|---|---|---|---|
1 |
1 |
Prénom 1 |
Nom 1 |
2 |
2 |
Prénom 2 |
Nom 2 |
Insertions pour l’utilisation de types imbriqués¶
Ces instructions doivent être placées entre la création de la table et l’instruction select pour tester la sortie.
Oracle¶
Snowflake¶
Utilisation des types imbriqués¶
Oracle¶
Résultats¶
CUSTOMER_ID |
CUSTOMER_DATA |
|---|---|
1 |
[client 1, [email@domain.com]] |
2 |
[client 2, [email2@domain.com]] |
Snowflake¶
Résultats¶
CUSTOMER_ID |
CUST_NAME |
CUST_EMAIL |
|---|---|---|
1 |
Client 1 |
email@domain.com |
2 |
Client 2 |
e-mail2@domain.com |
Problèmes connus¶
1. Migrated code output is not the same¶
L’instruction view est modifiée inutilement, ce qui fait que la table n’a plus le même comportement dans le code de sortie. Un élément de travail a été mis en place pour corriger ce problème.
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¶
Actuellement, il n’existe pas de solution connue pour l’une ou l’autre des options de création, c’est pourquoi elles ne sont pas prises en compte lors de la définition du type.
EWIs connexes¶
SSC-EWI-0056 : Create table n’est pas pris en charge.
SSC-EWI-0062: L’utilisation du type personnalisé a changé en variante.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
Définition du sous-type¶
This is a translation reference to convert the Subtype Variant of the Oracle Create Type Statements (UDTs) to Snowflake
Danger
Comme il n’y a aucune solution de contournement connue, SnowConvert AI ne reconnaît que ces définitions et ne prend en charge aucune traduction pour celles-ci.
Description¶
Les sous-types définissent une structure de données similaire à un enregistrement, avec les avantages supplémentaires des définitions des fonctions membres. Cela signifie que leurs données peuvent être utilisées dans le cadre d’un comportement au sein du type. Contrairement aux types d’objets, les sous-types sont construits comme une extension d’un autre type existant.
En ce qui concerne les définitions de sous-types, il n’y a toujours pas de traduction, mais il pourrait y avoir un moyen de les réimplémenter en utilisant les définitions des types d’objets et en utilisant ensuite leur traduction respective.
Modèles d’échantillons de sources¶
Sous-types d’un type d’objet¶
Oracle¶
Snowflake¶
Problèmes connus¶
1. Create Type creation options are not supported¶
Actuellement, il n’existe pas de solution connue pour l’une ou l’autre des options de création, c’est pourquoi elles ne sont pas prises en compte lors de la définition du type.
EWIs connexes¶
SSC-EWI-0056 : Create table n’est pas pris en charge.
SSC-EWI-OR0007 : Type de création non pris en charge dans Snowflake.