SnowConvert AI - Oracle - Create Type¶
Il s’agit d’une référence de traduction pour convertir les instructions Create Type d’Oracle (UDT) vers Snowflake
Description générale¶
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
CREATE [ OR REPLACE ] [ EDITIONABLE | NONEDITIONAL ] TYPE <type name>
[ <type source creation options> ]
[<type definition>]
[ <type properties> ]
Limitations¶
Snowflake ne prend pas en charge les types de données définis par l’utilisateur, selon sa documentation en ligne Types de données non pris en charge, mais il prend en charge les types de données semi-structurées, qui peuvent être utilisés pour imiter la structure hiérarchique de la plupart des types définis par l’utilisateur. C’est pourquoi il existe de nombreuses fonctions de type qui n’ont pas de solution de contournement.
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.
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);
/
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.
CREATE OR REPLACE TYPE type1 AS OBJECT () NOT FINAL NOT INSTANTIABLE NOT PERSISTABLE;
CREATE OR REPLACE TYPE type2 AS OBJECT () FINAL INSTANTIABLE PERSISTABLE;
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.
CREATE TYPE textdoc_typ AS OBJECT
( document_typ VARCHAR2(32)
, formatted_doc BLOB
) ;
/
CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
/
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.
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 ();
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¶
Le tableau suivant présente un résumé de la prise en charge actuelle fournie par l’outil SnowConvert AI. Veuillez tenir compte du fait que les traductions peuvent ne pas être finales et que du travail supplémentaire peut être nécessaire.
Élément d’instruction de type |
Statut de reconnaissance actuel |
Statut actuel de la traduction |
Solutions de contournement connues |
|---|---|---|---|
Reconnu. |
Partiellement traduit. |
Oui. |
|
Reconnu. |
Non traduit. |
Non. |
|
Reconnu. |
Non traduit. |
Oui. |
|
Reconnu. |
Non traduit. |
Non. |
|
Reconnu. |
Non traduit. |
Oui. |
Problèmes connus¶
1. DML usages for Object Types are not being transformed¶
Pour l’instant, seules les définitions de DDL qui utilisent des types définis par l’utilisateur sont transformées en Variante. Cela signifie que toutes les insertions, mises à jour ou suppressions utilisant des types définis par l’utilisateur ne sont pas transformées et doivent l’être manuellement. Il n’y a pas d’EWI pour cela, mais il existe un élément de travail visant à ajouter cet EWI correspondant.
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¶
Il s’agit d’une référence de traduction pour convertir la variante de type Array des instructions Create Type d’Oracle (UDT) vers Snowflake
Danger
SnowConvert AI ne reconnaît que ces définitions et, pour le moment, ne prend en charge aucune traduction pour celles-ci. Cette page n’est utilisée que comme référence future pour les traductions.
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).
Pour la traduction des types de tableaux, la définition du type est remplacée par un type de données semi-structurées, puis elle est étendue à toutes les utilisations dans le code. Il s’agit de prendre la définition d’un type et de l’étendre au code d’origine.
CREATE TYPE <type name>
AS { VARRAY | [VARYING] ARRAY } ( <size limit> ) OF <data type>
Modèles d’échantillons de sources¶
Insertions pour l’utilisation du tableau¶
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¶
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');
Utilisation du type de tableau¶
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;
/
Résultats¶
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;
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¶
Il s’agit d’une référence de traduction pour convertir les fonctions membres des instructions Create Type d’Oracle (UDT) vers 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¶
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);
Fonction simple square()¶
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;
/
Résultats¶
COLUMN1TGET_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;
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¶
Il s’agit d’une référence de traduction pour convertir la variante de table imbriquée des instructions Create Type d’Oracle (UDT) vers Snowflake
Danger
SnowConvert AI ne reconnaît que ces définitions, ne prend en charge aucune traduction et il n’existe aucune solution de contournement connue pour les remplacer.
Description¶
Les types de tables imbriquées définissent une structure de table intégrée à un type de données existant (y compris d’autres types personnalisés). Ils peuvent être utilisés comme une version plus puissante du type tableau.
Contrairement aux autres types, il n’existe toujours pas de solution de contournement connue ni de traduction possible.
CREATE TYPE <type name> AS TABLE OF <data type>
Modèles d’échantillons de sources¶
Utilisation du type de table imbriquée¶
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;
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¶
Il s’agit d’une référence de traduction pour convertir la variante d’objet des instructions Create Type d’Oracle (UDT) vers 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.
Pour la traduction des types d’objets, la définition du type est remplacée par un type de données semi-structurées, puis elle est étendue à toutes les utilisations dans le code. Pour les tables, cela signifie remplacer la colonne par une variante et ajouter une vue afin que les sélections (ainsi que les vues) vers la table d’origine puissent continuer à fonctionner.
CREATE TYPE <type name> AS OBJECT
( [{<type column definition> | type method definition } , ...]);
Modèles d’échantillons de sources¶
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¶
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 ***/!!!);
Utilisation du type simple¶
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;
Résultats¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[1, Prénom 1, Nom 1] |
2 |
[2, Prénom 2, Nom 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;
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¶
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 ***/!!!);
Utilisation des types imbriqués¶
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;
Résultats¶
CUSTOMER_ID |
CUSTOMER_DATA |
|---|---|
1 |
[client 1, [email@domain.com]] |
2 |
[client 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;
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 is not being transformed¶
DML qui interagit avec des éléments contenant des types définis par l’utilisateur (comme une table) ne sont pas transformés. Un élément de travail a été mis en place pour corriger ce problème.
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¶
Il s’agit d’une référence de traduction pour convertir la variante de sous-type des instructions Create Type d’Oracle (UDTde) vers 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.
CREATE TYPE <type name> UNDER <super type name>
( [{<type column definition> | type method definition } , ...]);
Modèles d’échantillons de sources¶
Sous-types d’un type d’objet¶
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)
;
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.