SnowConvert AI – Oracle – Benutzerdefinierte Typen

Beschreibung

Benutzerdefinierte Datentypen verwenden die in Oracle integrierten Datentypen und andere benutzerdefinierte Datentypen als Bausteine von Objekttypen, die die Struktur und die Verhaltensweise von Daten in Anwendungen modellieren. In den folgenden Abschnitten werden die verschiedenen Kategorien von benutzerdefinierten Typen beschrieben. (Oracle SQL Language Reference User-defined Data Types)

Warnung

Snowflake bietet keine Unterstützung von benutzerdefinierten Typen. Diese Seite soll eine Zusammenfassung der Features von Oracle sein. Informationen zum aktuellen Status von benutzerdefinierten Typen im SnowConvert AI Tool finden Sie auf der Seite zur CREATE TYPE-Anweisung und den entsprechenden Unterseiten.

Objekttypen

Bemerkung

SnowConvert AI bietet eine Teilübersetzung für Objekttypen. Weitere Informationen dazu finden Sie im nächsten Abschnitt: Definition von Objekttypen

REF-Datentypen

Gefahr

REF-Datentypen werden von SnowConvert AI nicht erkannt und werden stattdessen als nicht erkannte „benutzerdefinierte Funktionen“ angezeigt. Weitere Informationen über diesen Datentypen finden Sie auf der Unterseite zu REF-Datentypen.

Ein Bezeichner (dargestellt durch das Schlüsselwort OID) identifiziert ein Objekt eindeutig und ermöglicht es Ihnen, von anderen Objekten oder von relationalen Tabellen aus auf das Objekt zu verweisen. Eine Datentypkategorie namens REF steht für solche Referenzen. Ein REF Datentyp ist ein Container für einen Objektbezeichner. REF Werte sind Zeiger auf Objekte. (Oracle SQL Language Reference REF Data Types)

Varrays

Warnung

SnowConvert AI erkennt diese Elemente nur, bietet aber keine Übersetzung für sie an. Weitere Informationen dazu finden Sie im nächsten Abschnitt: Definition von Array-Typen

Verschachtelte Tabellen

Warnung

SnowConvert AI erkennt diese Elemente nur, bietet aber keine Übersetzung für sie an, da es keine Problemumgehungen für sie gibt. Weitere Informationen dazu finden Sie im nächsten Abschnitt: [Definition verschachtelter Tabellentypen](../../sql-translation -reference/create_type.md#nested-table-type-definition)

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

Es gibt keine bekannte Problemumgehung für die Implementierung verschachtelter Tabellen. Aus diesem Grund bietet SnowConvert AI nur eine Erkennung dieser Elemente.

3. Array types are not being transformed

Vorerst erkennt SnowConvert AI diese Elemente nur. Es gibt eine bekannte Problemumgehung und auch ein Work-Element zu deren Implementierung.

REF-Datentypen

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Beschreibung

Ein Bezeichner (dargestellt durch das Schlüsselwort OID) identifiziert ein Objekt eindeutig und ermöglicht es Ihnen, von anderen Objekten oder relationalen Tabellen aus auf das Objekt zu verweisen. Eine Datentypkategorie namens REF steht für solche Referenzen. Ein REF Datentyp ist ein Container für einen Objektbezeichner. REF Werte sind Zeiger auf Objekte. (Oracle SQL Language Reference REF Data Types)

REF-Datentypen werden in Snowflake nicht unterstützt und es gibt derzeit keine Umgehungsmöglichkeit, um eine ähnliche Komponente zu implementieren.

Ab sofort werden sie als benutzerdefinierte Funktionen erkannt und DANGLING-Klauseln werden nicht erkannt. Schließlich wird die OID-Klausel in der Ansicht entfernt, da es keine Umgehungsmöglichkeit für sie gibt.

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
Copy

Beispielhafte Quellcode-Muster

Typen und Tabellen für Referenzen

Bitte beachten Sie die folgenden Typen, Tabellen, Einfügungen und Ansichten. Sie werden für den nächsten Abschnitt des Musters verwendet.

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

Selects und Views mit 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;
Copy
Ergebnis mit verwaisten Referenzen

CUSTOMER_REFERENCE.CUST_FIRST_NAME

EMAIL_REF.EMAIL

First Name 1

abc@def.com

First Name 2

Ergebnis ohne verwaiste Referenzen

CUSTOMER_REFERENCE.CUST_FIRST_NAME

EMAIL_REF.EMAIL

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

Bekannte Probleme

1. REF und MAKE_REF werden nicht erkannt

Stattdessen werden sie derzeit als benutzerdefinierte Funktionen gekennzeichnet.

2. DANGLING-Klausel wird nicht erkannt

DANGLING-Klauseln verursachen beim Ausführen von SnowConvert Parsing-Fehler.

Zugehörige EWIs

  1. SSC-EWI-0001: Nicht erkanntes Token in der Zeile des Quellcodes.

  2. SSC-EWI-0073: Überprüfung auf gleichwertige Funktion ausstehend.

  3. SSC-FDM-0001: Ansichten, die alle Spalten einer einzelnen Tabelle auswählen, sind in Snowflake nicht erforderlich.