SnowConvert AI - Oracle - Create Type

これは、OracleのCreate Typeステートメント( UDT )をSnowflakeに変換するための翻訳リファレンスです

概要

Oracleデータベースエンジンが提供する最も重要な機能のひとつは、オブジェクト指向のアプローチです。 PL/SQL は、パッケージ、関数、テーブル、型の形でJavaのようなステートメントを使用することにより、 OOP の形で他のリレーショナルデータベースを超える機能を提供します。このドキュメントでは最後の1つを取り上げ、 SnowConvert AI が、機能に準拠したままそれをどのように解決するかを説明します。

Oracleは以下の仕様をサポートしています。

  • 抽象データ型(ADT)(SQLJ オブジェクト型を含む)。

  • スタンドアロンの変化する配列(varray)型。

  • スタンドアロンのネストされたテーブル型。

  • 不完全なオブジェクト型。

これらの情報は、Oracle作成タイプステートメントドキュメント に記載されています。

CREATE [ OR REPLACE ] [ EDITIONABLE | NONEDITIONAL ] TYPE <type name>
[ <type source creation options> ]
[<type definition>]
[ <type properties> ]
Copy

制限事項

オンラインドキュメントの サポートされていないデータ型 によると、Snowflakeはユーザー定義データ型をサポートしていませんが、半構造化データ型 をサポートしており、ほとんどのユーザー定義データ型の階層のような構造を模倣することができます。このため、回避策がないタイプの機能も複数あります。

以下は、 NO の回避策が提案されているユーザー定義型の機能です。

サブタイプ: タイプ階層

これらのステートメントはSnowflakeではサポートされていません。 SnowConvert AI は認識しますが、翻訳は提供されません。

CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn NUMBER) 
   NOT FINAL;
/

CREATE TYPE employee_t UNDER person_t 
   (department_id NUMBER, salary NUMBER) 
   NOT FINAL;
/

CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs NUMBER);
/
Copy

タイププロパティ

これらは、PL/SQL で OOP を使うときに通常使われるオプションを指します:Persistable、Instantiable、Final。

CREATE OR REPLACE TYPE type1 AS OBJECT () NOT FINAL NOT INSTANTIABLE NOT PERSISTABLE;
CREATE OR REPLACE TYPE type2 AS OBJECT () FINAL INSTANTIABLE PERSISTABLE;
Copy

ネストされたテーブル型

これらのステートメントはSnowflakeではサポートされていません。 SnowConvert AI は認識しますが、翻訳は提供されません。

CREATE TYPE textdoc_typ AS OBJECT
    ( document_typ      VARCHAR2(32)
    , formatted_doc     BLOB
    ) ;
/

CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
/
Copy

タイプソース作成オプション

これらのオプションは、タイプへのアクセスやクエリに関するカスタムオプションです。

CREATE TYPE type1 FORCE OID 'abc' SHARING = METADATA DEFAULT COLLATION schema1.collation ACCESSIBLE BY (schema1.unitaccesor) AS OBJECT ();
CREATE TYPE type2 FORCE OID 'abc' SHARING = NONE DEFAULT COLLATION collation ACCESSIBLE BY (PROCEDURE unitaccesor) AS OBJECT ();
CREATE TYPE type3 AUTHID CURRENT_USER AS OBJECT ();
CREATE TYPE type4 AUTHID DEFINER AS OBJECT ();
Copy

回避策の提案

タイプ定義について

定義については、Oracleのデータ型を模倣して半構造化データ型を作成するという回避策が提案されています。

タイプメンバー関数について

ロジックと DML を含むメンバー関数については、提案されている回避策は、これをストアドプロシージャに変換するヘルパーに依存しています。

現在の SnowConvert AI サポート

次のテーブルは、 SnowConvert AI ツールで現在提供されているサポートの概要を示しています。変換がまだ最終的なものではない可能性があること、さらに作業が必要になる可能性があることにご注意ください。

型ステートメント要素

現在の認識ステータス

現在の変換ステータス

既知の回避策がある

オブジェクト型の定義

認識されています。

部分的に変換されています。

あり。

サブタイプ定義

認識されています。

変換されていません。

なし。

配列型の定義

認識されています。

変換されていません。

あり。

ネストされたテーブルの定義

認識されています。

変換されていません。

なし。

メンバー関数の定義

認識されています。

変換されていません。

あり。

既知の問題

1.オブジェクト型の DML の使用は変換されていません

現時点では、ユーザー定義型を使用する DDL 定義のみがバリアントに変換されます。つまり、ユーザー定義型を使用した挿入、更新、削除は変換されず、手動で変換する必要があります。これに対する EWI はありませんが、対応する EWI を追加する作業項目があります。

2.タイプ作成オプションはサポートされていません

現在、いずれの作成オプションにも既知の回避策はありません。これらの理由により、タイプを定義するときには作成オプションは考慮されません。

配列型定義

これは、OracleのCreate Typeステートメント( UDT )の配列バリアントをSnowflakeに変換するための翻訳リファレンスです

危険

SnowConvert AI はこれらの定義を認識しますが、今のところ翻訳をサポートしていません。このページは、今後の翻訳の参考としてのみ使用されます。

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

配列型は、既存のデータ型(他のカスタム型を含む)の配列構造を定義します。

配列型の翻訳では、型定義は 半構造化データ型 に置き換えられ、コード全体で使用される場合に展開されます。これは、型の定義を元のコード上に展開することを意味します。

CREATE TYPE <type name>
AS { VARRAY | [VARYING] ARRAY } ( <size limit> ) OF <data type>
Copy

サンプルソースパターン

配列の使用に対する挿入

次のデータは、選択をクエリする前にテーブルに挿入されます。これらの挿入は現在、手動でSnowflakeに移行する必要があります。

Oracle
INSERT INTO customer_table_demo(customer_table_id, customer_data) VALUES
(1, phone_list_typ_demo('2000-0000', '4000-0000', '0000-0000'));

INSERT INTO customer_table_demo(customer_table_id, customer_data) VALUES
(1, phone_list_typ_demo('8000-2000', '0000-0000', '5000-0000'));
Copy
Snowflake
INSERT INTO customer_table_demo(customer_table_id, customer_data)
SELECT 1, ARRAY_CONSTRUCT('2000-0000', '4000-0000', '0000-0000');

INSERT INTO customer_table_demo(customer_table_id, customer_data)
SELECT 1, ARRAY_CONSTRUCT('8000-2000', '0000-0000', '5000-0000');
Copy

配列型の使用法

Oracle
CREATE TYPE phone_list_typ_demo AS VARRAY(3) OF VARCHAR2(25);
/

CREATE TABLE customer_table_demo (
    customer_table_id INTEGER,
    customer_data phone_list_typ_demo
);
/

SELECT * FROM customer_table_demo;
/
Copy
結果

CUSTOMER_TABLE_ID

CUSTOMER_DATA

1

[['2000-0000','4000-0000','0000-0000']]

1

[['8000-2000','0000-0000','5000-0000']]

Snowflake
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'VARYING ARRAY' NODE ***/!!!
CREATE TYPE phone_list_typ_demo AS VARRAY(3) OF VARCHAR2(25);

CREATE OR REPLACE TABLE customer_table_demo (
        customer_table_id INTEGER,
        customer_data VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'phone_list_typ_demo' USAGE CHANGED TO VARIANT ***/!!!
    )
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE VIEW PUBLIC.customer_table_demo_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
AS
SELECT
        customer_table_id,
        customer_data
FROM
        customer_table_demo;

    SELECT * FROM
        customer_table_demo_view;
Copy
結果

CUSTOMER_TABLE_ID

CUSTOMER_DATA

1

[['2000-0000', '4000-0000', '0000-0000']]

1

[['8000-2000', '0000-0000', '5000-0000']]

既知の問題

1.タイプ作成オプションはサポートされていません

現在、いずれの作成オプションにも既知の回避策はありません。これらの理由により、タイプを定義するときには作成オプションは考慮されません。

2.移行されたコード出力は機能しません

ステートメントが不必要に変更され、出力コード上で機能しなくなっています。適切な変換が実施されれば、この問題は解決されるでしょう。

関連 EWIs

  1. SSC-EWI-0062:カスタム型の使用法がバリアントに変更されました。

  2. SSC-EWI-0073: 機能等価性レビュー保留中。

メンバー関数の定義

これは、OracleのCreate Typeステートメント( UDT )のメンバー関数をSnowflakeに変換するための翻訳リファレンスです

危険

SnowConvert AI は依然として型のメンバー関数も型本体の定義も認識していません。このページは、今後の翻訳の参考としてのみ使用されます。

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

他の型定義と同様に、Oracleの TYPE は、その属性に基づいた動作を公開するメソッドを実装できます。MEMBER FUCTION をSnowflakeのストアドプロシージャに変換し、制限による機能的等価性を維持します。

関数はプロシージャに変換されるため、 PL/SQL の変換リファレンス もここに適用されます。

サンプルソースパターン

単純なsquare()メンバー関数の挿入

次のデータは、選択をクエリする前にテーブルに挿入されます。これらの挿入は現在、手動でSnowflakeに移行する必要があります。

Oracle
INSERT INTO table_member_function_demo(column1) VALUES
(type_member_function_demo(5));
Copy
Snowflake
INSERT INTO table_member_function_demo (column1)
SELECT OBJECT_CONSTRUCT('a1', 5);
Copy

単純なsquare()メンバー関数

Oracle
-- TYPE DECLARATION
CREATE TYPE type_member_function_demo AS OBJECT (
    a1 NUMBER,
    MEMBER FUNCTION get_square RETURN NUMBER
);
/

-- TYPE BODY DECLARATION
CREATE TYPE BODY type_member_function_demo IS
   MEMBER FUNCTION get_square
   RETURN NUMBER
   IS x NUMBER;
   BEGIN
      SELECT c.column1.a1*c.column1.a1 INTO x
      FROM table_member_function_demo c;
      RETURN (x);
   END;
END;
/

-- TABLE
CREATE TABLE table_member_function_demo (column1 type_member_function_demo);
/

-- QUERYING DATA
SELECT
    t.column1.get_square()
FROM
    table_member_function_demo t;
/
Copy
結果

T.COLUMN1.GET_SQUARE()

25

Snowflake
-- TYPE DECLARATION
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type_member_function_demo AS OBJECT (
    a1 NUMBER,
    MEMBER FUNCTION get_square RETURN NUMBER
)
;

---- TYPE BODY DECLARATION
--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE WITHOUT BODY IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE BODY type_member_function_demo IS
--   MEMBER FUNCTION get_square
--   RETURN NUMBER
--   IS x NUMBER;
--   BEGIN
--      SELECT c.column1.a1*c.column1.a1 INTO x
--      FROM table_member_function_demo c;
--      RETURN (x);
--   END;
--END
   ;

-- TABLE
CREATE OR REPLACE TABLE table_member_function_demo (column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'type_member_function_demo' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE VIEW PUBLIC.table_member_function_demo_view
<strong>COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
</strong><strong>AS
</strong>SELECT
    column1:a1 :: NUMBER AS a1
FROM
    table_member_function_demo;

-- QUERYING DATA
SELECT
    t.column1.get_square() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 't.column1.get_square' NODE ***/!!!
FROM
    table_member_function_demo t;
Copy
結果

GET_SQUARE()

25

既知の問題

既知の問題はありません。

関連 EWIs

  1. SSC-EWI-0056: 作成タイプがサポートされていません。

  2. SSC-EWI-0062:カスタム型の使用法がバリアントに変更されました。

  3. SSC-EWI-0073: 機能等価性レビュー保留中。

  4. SSC-EWI-OR0007:Create TypeはSnowflakeでサポートされていません

ネストされたテーブル型定義

これは、OracleのCreate Typeステートメント( UDT )のネストされたテーブルバリアントをSnowflakeに変換するための翻訳リファレンスです

危険

SnowConvert AI はこれらの定義を認識しますが、翻訳をサポートしておらず、回避策も知られていません。

説明

ネストされたテーブル型は、既存のデータ型(他のカスタム型を含む)の埋め込みテーブル構造を定義します。配列型の強力なバージョンとして使うことができます。

他の型とは異なり、回避策や可能な翻訳がまだ知られていません。

CREATE TYPE <type name> AS TABLE OF <data type>
Copy

サンプルソースパターン

ネストされたテーブル型の使用

Oracle
CREATE TYPE textdoc_typ AS OBJECT (
    document_typ VARCHAR2(32),
    formatted_doc BLOB
);
/

CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
/
Copy
Snowflake
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE textdoc_typ AS OBJECT (
    document_typ VARCHAR2(32),
    formatted_doc BLOB
)
;

!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'NESTED TABLE' NODE ***/!!!

CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
Copy

既知の問題

1.タイプ作成オプションはサポートされていません

現在、いずれの作成オプションにも既知の回避策はありません。これらの理由により、タイプを定義するときには作成オプションは考慮されません。

関連 EWIs

  1. SSC-EWI-0073: 機能等価性レビュー保留中

  2. SSC-EWI-0056: 作成タイプがサポートされていません。

オブジェクト型定義

これは、OracleのCreate Typeステートメント( UDT )のオブジェクトバリアントをSnowflakeに変換するための翻訳リファレンスです

注釈

SnowConvert AI は、オブジェクト型定義自体の翻訳をサポートしています。しかし、その使用法はまだ作業の進行中です。

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

オブジェクト型は、記録に似たデータ構造を定義しますが、メンバー関数の定義という利点が加わります。つまり、そのデータは型内の何らかの動作に沿って使用される可能性があるということです。

オブジェクト型の翻訳では、型定義は 半構造化データ型 に置き換えられ、コード全体で使用される場合に展開されます。テーブルの場合、これはバリアント用の列を置き換えることを意味し、ビューを追加することで、元のテーブルへの選択(およびビュー)がまだ機能するようにします。

CREATE TYPE <type name> AS OBJECT
( [{<type column definition> | type method definition } , ...]);
Copy

サンプルソースパターン

単純な型の使用時の挿入

次のデータは、選択をクエリする前にテーブルに挿入されます。これらの挿入は現在、手動でSnowflakeに移行する必要があります。

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

INSERT INTO customer_table_demo(customer_table_id, customer_data)
VALUES ( 2, customer_typ_demo(2, 'First Name 2', 'Last Name 2'));
Copy
Snowflake
INSERT INTO customer_table_demo(customer_table_id, customer_data)
VALUES ( 1, customer_typ_demo(1, 'First Name 1', 'Last Name 1') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'customer_typ_demo' NODE ***/!!!);

INSERT INTO customer_table_demo(customer_table_id, customer_data)
VALUES ( 2, customer_typ_demo(2, 'First Name 2', 'Last Name 2') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'customer_typ_demo' NODE ***/!!!);
Copy

単純な型の使用

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

CREATE TABLE customer_table_demo (
    customer_table_id INTEGER,
    customer_data customer_typ_demo
);

SELECT * FROM customer_table_demo;
Copy
結果

CUSTOMER_TABLE_ID

CUSTOMER_DATA

1

[1, 名前1, 姓1]

2

[2, 名前2, 姓2]

Snowflake
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE customer_typ_demo AS OBJECT (
    customer_id INTEGER,
    cust_first_name VARCHAR2(20),
    cust_last_name VARCHAR2(20)
)
;

CREATE OR REPLACE TABLE customer_table_demo (
        customer_table_id INTEGER,
        customer_data VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'customer_typ_demo' USAGE CHANGED TO VARIANT ***/!!!
    )
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}}'
;

CREATE OR REPLACE VIEW PUBLIC.customer_table_demo_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
AS
SELECT
        customer_table_id,
        customer_data:customer_id :: INTEGER AS customer_id,
        customer_data:cust_first_name :: VARCHAR AS cust_first_name,
        customer_data:cust_last_name :: VARCHAR AS cust_last_name
FROM
        customer_table_demo;

    SELECT * FROM
        customer_table_demo_view;
Copy
結果

CUSTOMER_TABLE_ID

CUST_ID

CUST_FIRST_NAME

CUST_LAST_NAME

1

1

名前1

姓1

2

2

名前2

姓2

ネストされた型の使用時の挿入

これらのステートメントは、出力をテストするために、テーブルの作成とselectステートメントの間に配置する必要があります。

Oracle
INSERT INTO customer_table_demo(customer_id, customer_data) values
(1, customer_typ_demo('Customer 1', email_typ_demo('email@domain.com')));

INSERT INTO customer_table_demo(customer_id, customer_data) values
(2, customer_typ_demo('Customer 2', email_typ_demo('email2@domain.com')));
Copy
Snowflake
INSERT INTO customer_table_demo(customer_id, customer_data) values
(1, customer_typ_demo('Customer 1', email_typ_demo('email@domain.com') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'email_typ_demo' NODE ***/!!!) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'customer_typ_demo' NODE ***/!!!);

INSERT INTO customer_table_demo(customer_id, customer_data) values
(2, customer_typ_demo('Customer 2', email_typ_demo('email2@domain.com') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'email_typ_demo' NODE ***/!!!) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'customer_typ_demo' NODE ***/!!!);
Copy

ネストされた型の使用

Oracle
CREATE TYPE email_typ_demo AS OBJECT (email VARCHAR2(20));

CREATE TYPE customer_typ_demo AS OBJECT (
    cust_name VARCHAR2(20),
    cust_email email_typ_demo
);

CREATE TABLE customer_table_demo (
    customer_id INTEGER,
    customer_data customer_typ_demo
);

SELECT * FROM customer_table_demo;
Copy
結果

CUSTOMER_ID

CUSTOMER_DATA

1

[顧客1, [email@domain.com]]

2

[顧客2, [email2@domain.com]]

Snowflake
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE email_typ_demo AS OBJECT (email VARCHAR2(20))
;

!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!

CREATE TYPE customer_typ_demo AS OBJECT (
    cust_name VARCHAR2(20),
    cust_email email_typ_demo
)
;

CREATE OR REPLACE TABLE customer_table_demo (
    customer_id INTEGER,
    customer_data VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'customer_typ_demo' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}}'
;

CREATE OR REPLACE VIEW PUBLIC.customer_table_demo_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
AS
SELECT
    customer_id,
    customer_data:cust_name :: VARCHAR AS cust_name,
    customer_data:cust_email:email :: VARCHAR AS email
FROM
    customer_table_demo;

SELECT * FROM
    customer_table_demo_view;
Copy
結果

CUSTOMER_ID

CUST_NAME

CUST_EMAIL

1

顧客1

email@domain.com

2

顧客2

email2@domain.com

既知の問題

1.移行したコードの出力が異なります

ビューステートメントが不必要に変更されているため、出力コードでテーブルが同じ動作をしなくなっています。この問題を修正するための作業項目があります。

2.DML ユーザー定義型は変換されません

(テーブルのような)ユーザー定義型を持つ要素と相互作用する DML は変換されません。将来的にこれを実装するための作業項目があります。

3.タイプ作成オプションはサポートされていません

現在、いずれの作成オプションにも既知の回避策はありません。これらの理由により、タイプを定義するときには作成オプションは考慮されません。

関連 EWIs

  1. SSC-EWI-0056: 作成タイプがサポートされていません。

  2. SSC-EWI-0062:カスタム型の使用法がバリアントに変更されました。

  3. SSC-EWI-0073: 機能等価性レビュー保留中。

サブタイプの定義

これは、OracleのCreate Typeステートメント( UDT )のサブタイプバリアントをSnowflakeに変換するための翻訳リファレンスです

危険

既知の回避策がないため、 SnowConvert AI はこれらの定義を認識しますが、それに対する翻訳をサポートしていません。

説明

サブタイプは、記録に似たデータ構造を定義しますが、メンバー関数の定義という利点が加わります。つまり、そのデータは型内の何らかの動作に沿って使用される可能性があるということです。オブジェクト型とは異なり、サブタイプは既存のタイプの拡張として構築されます。

サブタイプの定義については、まだ翻訳がありませんが、オブジェクト型定義を使って再実装し、それぞれの翻訳を使う方法があるかもしれません。

CREATE TYPE <type name> UNDER <super type name>
( [{<type column definition> | type method definition } , ...]);
Copy

サンプルソースパターン

オブジェクト型の基になるサブタイプ

Oracle
CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn INTEGER) 
   NOT FINAL;
/

CREATE TYPE employee_t UNDER person_t 
   (department_id INTEGER, salary INTEGER) 
   NOT FINAL;
/

CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs INTEGER);
/
Copy
Snowflake
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn INTEGER)
   NOT FINAL;

--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!

--CREATE TYPE employee_t UNDER person_t
--   (department_id INTEGER, salary INTEGER)
--   NOT FINAL
            ;

--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!

--CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs INTEGER)
                                                              ;
Copy

既知の問題

1.タイプ作成オプションはサポートされていません

現在、いずれの作成オプションにも既知の回避策はありません。これらの理由により、タイプを定義するときには作成オプションは考慮されません。

関連 EWIs

  1. SSC-EWI-0056: 作成タイプがサポートされていません。

  2. SSC-EWI-OR0007: 作成タイプがSnowflakeでサポートされていません。