SnowConvert AI - Oracle - Create Type

This is a translation reference to convert Oracle Create Type Statements (UDTs) to snowflake

概要

SnowConvert translates many Oracle CREATE TYPE statements to Snowflake native user-defined types where the shape is supported—for example object types with attributes, VARRAY mapped to Snowflake ARRAY, and nested table types mapped to ARRAY of the element type. Unsupported options (subtype inheritance, member bodies, incomplete types, and others) are flagged with Oracle-specific EWIs; see Related EWIs and the issues reference.

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> ]

制限事項

Snowflake supports native user-defined types (CREATE TYPE AS OBJECT, ARRAY, etc.) as documented in the SQL data types overview. SnowConvert maps many Oracle type definitions to those native types. Patterns that still have no or partial mapping—such as subtype inheritance (UNDER), member methods and type bodies, table types, and incomplete forward declarations—may require manual redesign or are reported via EWIs (for example SSC-EWI-OR0139 through SSC-EWI-OR0142). Semi-structured Data Types remain relevant for legacy scenarios that still use VARIANT in converted code.

以下は、 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);
/

タイププロパティ

これらは、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;

ネストされたテーブル型

これらのステートメントは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;
/

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

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

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 ();

回避策の提案

タイプ定義について

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

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

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

現在の SnowConvert AI サポート

The next table shows a summary of the current support provided by the SnowConvert AI tool. Please keep in mind that translations may still not be final, and more work may be needed.

型ステートメント要素

現在の認識ステータス

現在の変換ステータス

既知の回避策がある

オブジェクト型の定義

認識されています。

Translated to Snowflake CREATE TYPE AS OBJECT where supported.

あり。

サブタイプ定義

認識されています。

変換されていません。

なし。

配列型の定義

認識されています。

Translated to Snowflake CREATE TYPE AS ARRAY (see SSC-FDM-OR0051).

あり。

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

認識されています。

Translated to Snowflake ARRAY of element type where supported.

Limited.

メンバー関数の定義

認識されています。

変換されていません。

あり。

既知の問題

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

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

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

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

配列型定義

This is a translation reference to convert the Array Variant of the Oracle Create Type Statements (UDTs) to Snowflake

注釈

Oracle VARRAY types are translated to Snowflake CREATE TYPE AS ARRAY ( element_type ). Fixed varray capacity is not preserved; see SSC-FDM-OR0051. Column usages may still be migrated to VARIANT in older or mixed scenarios—verify generated DDL for your workload.

注釈

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

説明

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

For many workloads, the type definition is emitted as a Snowflake native ARRAY type. Usages in tables and PL/SQL may still involve Semi-structured Data Types or OBJECT depending on context.

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

サンプルソースパターン

配列の使用に対する挿入

次のデータは、選択をクエリする前にテーブルに挿入されます。これらの挿入は現在、手動で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'));
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');

配列型の使用法

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;
/
結果

CUSTOMER_TABLE_ID

CUSTOMER_DATA

1

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

1

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

Snowflake
--** SSC-FDM-OR0051 - ARRAY SIZE LIMIT '3' WAS REMOVED. SNOWFLAKE ARRAYS ARE DYNAMICALLY SIZED. **
CREATE TYPE phone_list_typ_demo AS ARRAY ( VARCHAR(25) );

CREATE OR REPLACE TABLE customer_table_demo (
        customer_table_id INTEGER,
        customer_data phone_list_typ_demo
    )
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;
結果

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: 機能等価性レビュー保留中。

メンバー関数の定義

This is a translation reference to convert the Member Functions of the Oracle Create Type Statements (UDTs) to 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));
Snowflake
INSERT INTO table_member_function_demo (column1)
SELECT OBJECT_CONSTRUCT('a1', 5);

単純な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;
/
結果

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;
結果

GET_SQUARE()

25

既知の問題

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

関連 EWIs

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

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

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

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

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

This is a translation reference to convert the Nested Table Variant of the Oracle Create Type Statements (UDTs) to Snowflake

注釈

Standalone CREATE TYPE AS TABLE OF element_type is translated to Snowflake CREATE TYPE AS ARRAY ( element_type ) when the element type is supported. Nested tables used as table columns may still require manual review depending on DML and PL/SQL usage.

説明

Nested Table Types define an embedded table structure of a previously existing datatype (including other Custom Types). They are closely related to Array Type definitions; SnowConvert maps many patterns to Snowflake ARRAY.

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

サンプルソースパターン

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

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

CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
/
Snowflake
CREATE TYPE textdoc_typ AS OBJECT (
    document_typ VARCHAR(32),
    formatted_doc BINARY
)
;

CREATE TYPE textdoc_tab AS ARRAY ( textdoc_typ );

既知の問題

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

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

関連 EWIs

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

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

オブジェクト型定義

This is a translation reference to convert the Object Variant of the Oracle Create Type Statements (UDTs) to Snowflake

注釈

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

注釈

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

説明

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

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

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

サンプルソースパターン

単純な型の使用時の挿入

次のデータは、選択をクエリする前にテーブルに挿入されます。これらの挿入は現在、手動で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'));
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 ***/!!!);

単純な型の使用

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;
結果

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;
結果

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')));
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 ***/!!!);

ネストされた型の使用

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;
結果

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;
結果

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: 機能等価性レビュー保留中。

サブタイプの定義

This is a translation reference to convert the Subtype Variant of the Oracle Create Type Statements (UDTs) to Snowflake

危険

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

説明

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

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

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

サンプルソースパターン

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

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);
/
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)
                                                              ;

既知の問題

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

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

関連 EWIs

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

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