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 namensREFsteht für solche Referenzen. EinREFDatentyp ist ein Container für einen Objektbezeichner.REFWerte 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 namensREFsteht für solche Referenzen. EinREFDatentyp ist ein Container für einen Objektbezeichner.REFWerte 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
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;
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;
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
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¶
SSC-EWI-0001: Nicht erkanntes Token in der Zeile des Quellcodes.
SSC-EWI-0073: Überprüfung auf gleichwertige Funktion ausstehend.
SSC-FDM-0001: Ansichten, die alle Spalten einer einzelnen Tabelle auswählen, sind in Snowflake nicht erforderlich.