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
Copy

サンプルソースパターン

参照のタイプとテーブル

以下のタイプ、テーブル、挿入、ビューをご検討ください。これらは次のパターンセクションで使用されます。

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

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
ダングリングありの結果

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
Copy

既知の問題

1.REF および MAKE_REF は認識されません

現在、これらはユーザー定義関数としてマークされています。

2.DANGLING 句は認識されません

DANGLING 句は、 SnowConvert を実行する際に解析エラーを引き起こします。

関連 EWIs

  1. SSC-EWI-0001 :ソースコードの行で認識できないトークン。

  2. [SSC-EWI-0073](../../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0073) :機能的同等性レビューを保留中。

  3. SSC-FDM-0001 :単一テーブルからすべての列を選択するビューは、Snowflakeでは必要ありません。