SnowConvert AI - Oracle - ユーザー定義型¶
説明¶
ユーザー定義データ型は、アプリケーションのデータ構造と動作をモデリングするオブジェクト型の構成要素として、Oracle組み込みデータ型とその他のユーザー定義データ型を使用します。以下のセクションでは、ユーザー定義型のさまざまなカテゴリについて説明します。(Oracle SQL 言語リファレンスユーザー定義データ型)
警告
Snowflakeはユーザー定義型をサポートしていません。このページはOracleの機能を要約したものです。SnowConvert AI ツールにおけるユーザー定義型の現在のステータスについては、 Create型ステートメントページ およびそのサブページを参照してください。
オブジェクト型¶
注釈
SnowConvert AI はオブジェクト型の部分的な翻訳を提供します。 オブジェクト型の定義 を参照してください。
REF データ型¶
危険
Refデータ型は SnowConvert AI では認識されず、未認識の「ユーザー定義関数」として表示されます。これらについての詳細は、 REF データ型サブページ をお読みください。
オブジェクト識別子(キーワード
OIDで表されます)は、オブジェクトを一意に識別し、他のオブジェクトやリレーショナルテーブルからオブジェクトを参照できるようにします。REFと呼ばれるデータ型カテゴリは、このような参照を表します。REFデータ型はオブジェクト識別子のコンテナーです。REF値はオブジェクトへのポインターです。(Oracle SQL 言語リファレンス REF データ型)
Varrays¶
警告
SnowConvert AI はこれらの要素を認識するだけで、翻訳は行いません。詳細は、 配列型の定義 を参照してください。
ネストされたテーブル¶
警告
SnowConvert AI はこれらの要素を認識するだけで、既知の回避策がないため、翻訳を提供しません。これに関する詳細については、 ネストされたテーブル型の定義 を参照してください。
既知の問題¶
1.オブジェクト型の DML の使用は変換されていません¶
現時点では、ユーザー定義型を使用する DDL 定義のみがバリアントに変換されます。つまり、ユーザー定義型を使用した挿入、更新、削除は変換されず、手動で変換する必要があります。これに対する EWI はありませんが、対応する EWI を追加する作業項目があります。
2.ネストされたテーブル型は変換されていません¶
ネストされたテーブルを実装するための既知の回避策はありません。このため、 SnowConvert AI はこれらの要素の認識のみを提供します。
3.配列型は変換されていません¶
今のところ、SnowConvert AI はこれらの要素を認識するのみです。既知の回避策が存在し、それらを実装するための作業アイテムがあります。
REF データ型¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
オブジェクト識別子(キーワード
OIDで表されます)は、オブジェクトを一意に識別し、他のオブジェクトやリレーショナルテーブルからオブジェクトを参照できるようにします。REFと呼ばれるデータ型カテゴリは、このような参照を表します。REFデータ型はオブジェクト識別子のコンテナーです。REF値はオブジェクトへのポインターです。(Oracle SQL 言語リファレンス REF データ型)
REF データ型はSnowflakeではサポートされておらず、同様のコンポーネントを実装するための回避策は現在ありません。
現在のところ、これらはユーザー定義関数として認識され、"DANGLING"句は認識されません。最後に、表示中の OID 句は、回避策がないため削除されます。
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
サンプルソースパターン¶
参照のタイプとテーブル¶
以下のタイプ、テーブル、挿入、ビューをご検討ください。これらは次のパターンセクションで使用されます。
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;
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;
ダングリングありの結果¶
CUSTOMER_REFERENCE.CUST_FIRST_NAME |
EMAIL_REF.EMAIL |
|---|---|
名前1 |
abc@def.com |
名前2 |
ダングリングなしの結果¶
CUSTOMER_REFERENCE.CUST_FIRST_NAME |
EMAIL_REF.EMAIL |
|---|---|
名前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
既知の問題¶
1.REF および MAKE_REF は認識されません
現在、これらはユーザー定義関数としてマークされています。
2.DANGLING 句は認識されません
DANGLING 句は、 SnowConvert を実行する際に解析エラーを引き起こします。
関連 EWIs¶
SSC-EWI-0001 :ソースコードの行で認識できないトークン。
[SSC-EWI-0073](../../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0073) :機能的同等性レビューを保留中。
SSC-FDM-0001 :単一テーブルからすべての列を選択するビューは、Snowflakeでは必要ありません。