SnowConvert AI - Oracle - Types définis par l’utilisateur

Description

Les types de données définis par l’utilisateur utilisent les types de données intégrés d’Oracle et d’autres types de données définis par l’utilisateur comme éléments constitutifs des types d’objets qui modélisent la structure et le comportement des données dans les applications. Les sections suivantes décrivent les différentes catégories de types définis par l’utilisateur. (Référence linguistique Oracle SQL Types de données définis par l’utilisateur)

Avertissement

Snowflake ne prend pas en charge les types définis par l’utilisateur. Cette page est destinée à être un résumé des fonctionnalités d’Oracle. Pour le statut actuel des types définis par l’utilisateur dans l’outil SnowConvert AI, reportez-vous à la section Créer une page d’instruction de type et ses sous-pages.

Types d’objets

Note

SnowConvert AI propose une traduction partielle pour les types d’objets. Pour plus d’informations à ce sujet, veuillez consulter la section suivante : Définition du type d’objets

Types de données REF

Danger

Les types de données de référence ne sont pas reconnus par SnowConvert AI. Par conséquent, elles sont affichées en tant que « fonctions définies par l’utilisateur » non reconnues. Pour plus d’informations à leur sujet, veuillez lire la Sous-page Types de donnéesREF.

Un identificateur d’objet (représenté par le mot-clé OID) identifie un objet de manière unique et vous permet de faire référence à l’objet à partir d’autres objets ou de tables relationnelles. Une catégorie de type de données appelée REF représente de telles références. Un type de données REF est un conteneur pour un identificateur d’objet. Les valeurs REF sont des pointeurs vers des objets.(Référence linguistique Oracle SQL Types de données REF)

Tableaux Varray

Avertissement

SnowConvert AI ne reconnaît que ces éléments mais n’offre pas de traduction pour eux. Pour plus d’informations à ce sujet, veuillez consulter la section suivante : [Définition de type Array (tableau)](../../sql-translation-reference/create_type.md#array- définition-type)

Tables imbriquées

Avertissement

SnowConvert AI ne reconnaît que ces éléments, mais n’offre pas de traduction pour eux car il n’existe pas de solutions de contournement connues pour eux. Pour plus d’informations à ce sujet, veuillez consulter la section suivante :[Définition de type de table imbriquée](../../sql-translation -reference/create_type.md#nested-table-type-definition)

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. Nested Table types are not being transformed

Il n’existe aucune solution de contournement connue pour mettre en œuvre des tables imbriquées, pour cette raison SnowConvert AI offre uniquement la reconnaissance de ces éléments.

3. Array types are not being transformed

Pour l’instant SnowConvert AI ne reconnaît que ces éléments. Il existe une solution de contournement connue et un élément de travail pour les mettre en œuvre.

Types de données REF

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

Un identificateur d’objet (représenté par le mot-clé OID) identifie un objet de manière unique et vous permet de faire référence à l’objet à partir d’autres objets ou de tables relationnelles. Une catégorie de type de données appelée REF représente de telles références. Un type de données REF est un conteneur pour un identificateur d’objet. Les valeurs REF sont des pointeurs vers des objets.(Référence linguistique Oracle SQL Types de données REF)

Les types de données REF ne sont pas pris en charge dans Snowflake, et il n’existe actuellement aucune solution de contournement pour mettre en œuvre un composant similaire.

Pour l’instant, ils sont reconnus comme des fonctions définies par l’utilisateur et les clauses « DANGLING » ne sont pas reconnues. Enfin, la clause OID dans la vue est supprimée, car il n’y a pas de solution de contournement.

CREATE VIEW generic_view AS
SELECT REF(type) AS ref_col, MAKE_REF(type, identifier_column) AS make_ref_col
FROM generic_table;

SELECT v.ref_col, v.make_ref_col
FROM generic_view v
WHERE v.ref_col IS NOT DANGLING AND v.make_ref_col IS NOT DANGLING

Modèles d’échantillons de sources

Types et tables pour les références

Veuillez prendre en considération les types, tables, inserts et vues suivants. Ils seront utilisés pour la section suivante du modèle.

Oracle
CREATE TYPE email_typ_demo AS OBJECT
	( email_id INTEGER
	, email VARCHAR2(30)
	);

CREATE TYPE customer_typ_demo AS OBJECT
    ( customer_id        INTEGER
    , cust_first_name    VARCHAR2(20)
    , cust_last_name     VARCHAR2(20)
    , email_id			 INTEGER
    ) ;

CREATE TABLE email_table_demo OF email_typ_demo;
CREATE TABLE customer_table_demo OF customer_typ_demo;

INSERT INTO customer_table_demo VALUES
(customer_typ_demo(1, 'First Name 1', 'Last Name 1', 1));

INSERT INTO customer_table_demo VALUES
(customer_typ_demo(2, 'First Name 2', 'Last Name 2', 2));

INSERT INTO email_table_demo VALUES 
(email_typ_demo(1, 'abc@def.com'));

CREATE VIEW email_object_view OF email_typ_demo WITH OBJECT IDENTIFIER (email_id) AS
SELECT * FROM email_table_demo;

Sélection et vue à l’aide de REFs

Oracle
CREATE VIEW email_object_view OF email_typ_demo WITH OBJECT IDENTIFIER (email_id) AS
SELECT * FROM email_table_demo;

CREATE VIEW customer_view AS
SELECT REF(ctb) AS customer_reference
     , MAKE_REF(email_object_view, ctb.email_id) AS email_ref
FROM customer_table_demo ctb;

SELECT c.customer_reference.cust_first_name, c.email_ref.email
FROM customer_view c;

SELECT c.customer_reference.cust_first_name, c.email_ref.email
FROM customer_view c
WHERE c.email_ref IS NOT DANGLING;
Résultat avec clause DANGLING

CUSTOMER_REFERENCE.CUST_FIRST_NAME

EMAIL_REF.EMAIL

Prénom 1

abc@def.com

Prénom 2

Résultat sans clause DANGLING

CUSTOMER_REFERENCE.CUST_FIRST_NAME

EMAIL_REF.EMAIL

Prénom 1

abc@def.com

Snowflake
CREATE OR REPLACE VIEW email_object_view
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT * FROM
     email_table_demo;

CREATE OR REPLACE VIEW customer_view
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
SELECT REF(ctb) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'REF' NODE ***/!!! AS customer_reference
     , MAKE_REF(email_object_view, ctb.email_id) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'MAKE_REF' NODE ***/!!! AS email_ref
FROM
     customer_table_demo ctb;

     SELECT c.customer_reference.cust_first_name, c.email_ref.email
     FROM
     customer_view c;

     SELECT c.customer_reference.cust_first_name, c.email_ref.email
FROM
     customer_view c
WHERE c.email_ref;
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '14' COLUMN '19' OF THE SOURCE CODE STARTING AT 'IS'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS ';' ON LINE '10' COLUMN '21'. FAILED TOKEN WAS 'IS' ON LINE '14' COLUMN '19'. CODE '94'. **
--                   IS NOT DANGLING

Problèmes connus

1. REF et MAKE_REF ne sont pas reconnus

Au lieu de cela, ils sont actuellement marqués comme des fonctions définies par l’utilisateur.

2. La clause DANGLING n’est pas reconnue

Les clauses DANGLING provoquent des erreurs d’analyse lors de l’exécution de SnowConvert.

EWIs connexes

  1. SSC-EWI-0001: Jeton non reconnu sur la ligne du code source.

  2. SSC-EWI-0073: Examen de l’équivalence fonctionnelle en attente.

  3. SSC-FDM-0001: Les vues sélectionnant toutes les colonnes d’une seule table ne sont pas nécessaires dans Snowflake.