SnowConvert AI - Oracle - Create Type¶
Oracle Create Type 문(UDT의)을 Snowflake로 변환하기 위한 변환 참조입니다.
일반 설명¶
Oracle 데이터베이스 엔진이 제공하는 가장 중요한 기능 중 하나는 오브젝트 지향 접근 방식입니다. PL/SQL은 패키지, 함수, 테이블 및 유형의 형태로 Java와 유사한 문을 사용하여 OOP 형식으로 다른 관계형 데이터베이스를 능가하는 기능을 제공합니다. 이 문서에서는 마지막 항목 및 SnowConvert AI가 기능을 준수하면서 이를 해결하는 방법에 대해 다룹니다.
Oracle은 다음 사양을 지원합니다.
추상 데이터 타입 (_ADT _) (SQLJ 오브젝트 타입 포함).
독립형 가변 배열 (varray) 유형.
독립형 중첩 테이블 유형.
불완전한 오브젝트 유형.
이러한 모든 내용은 Oracle 생성 유형 문 설명서 의 정보에 따른 것입니다
CREATE [ OR REPLACE ] [ EDITIONABLE | NONEDITIONAL ] TYPE <type name>
[ <type source creation options> ]
[<type definition>]
[ <type properties> ]
제한 사항¶
온라인 설명서 지원되지 않는 데이터 타입 에 따르면 Snowflake는 사용자 정의 데이터 타입을 지원하지 않지만, 대부분의 사용자 정의 타입의 계층 구조를 모방하는 데 사용할 수 있는반정형 데이터 타입 을 지원합니다. 이러한 이유로 해결 방법이 없는 여러 유형의 기능이 있습니다.
다음은 해결 방법이 제안되지 않은 사용자 정의 유형 기능입니다.
하위 유형: 유형 계층 구조¶
이러한 문은 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);
/
Type 속성¶
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;
/
Type Source Creation 옵션¶
이 옵션은 액세스 및 유형 쿼리와 관련된 사용자 지정 옵션을 나타냅니다.
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 지원¶
다음 테이블은 SnowConvert AI 도구에서 제공하는 현재 지원에 대한 요약을 보여줍니다. 변환이 아직 최종 버전이 아닐 수 있으며 더 많은 작업이 필요할 수 있습니다.
형식 문 요소 |
현재 인식 상태 |
현재 변환 상태 |
알려진 해결 방법이 있음 |
|---|---|---|---|
인식됨. |
부분적으로 변환됨. |
예. |
|
인식됨. |
변환되지 않음. |
아니요. |
|
인식됨. |
변환되지 않음. |
예. |
|
인식됨. |
변환되지 않음. |
아니요. |
|
인식됨. |
변환되지 않음. |
예. |
Known Issues¶
1. DML usages for Object Types are not being transformed¶
현재로서는 사용자 정의 유형을 사용하는 DDL 정의만 베리언트로 변환되고 있습니다. 즉, 사용자 정의 유형을 사용하는 모든 삽입, 업데이트 또는 삭제는 변환되지 않으며 수동으로 변환해야 합니다. 이에 대한 EWI 는 없지만 이에 해당하는 EWI 를 추가하는 작업 항목이 있습니다.
2. Create Type creation options are not supported¶
현재 생성 옵션에 대한 알려진 해결 방법은 없으며, 이러한 이유로 유형을 정의할 때 계정을 고려하지 않습니다.
배열 유형 정의¶
Oracle Create Type 문(UDT의)의 배열 베리언트를 Snowflake로 변환하기 위한 변환 참조입니다.
위험
SnowConvert AI는 이러한 정의를 인식만 할 뿐 현재 이에 대한 변환은 지원하지 않습니다. 이 페이지는 향후 변환 참조용으로만 사용됩니다.
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
배열 유형은 이전에 존재하는 데이터 타입(다른 사용자 정의 유형 포함)의 배열 구조를 정의합니다.
배열 타입의 변환의 경우, 타입 정의가 반정형 데이터 타입 으로 대체된 다음 코드 전체에서 모든 사용처에 확장됩니다. 즉, 타입의 정의를 가져와서 원본 코드에서 확장하는 것을 의미합니다.
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¶
!!!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;
결과¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[[‘2000-0000’, ‘4000-0000’, ‘0000-0000’]] |
1 |
[[‘8000-2000’, ‘0000-0000’, ‘5000-0000’]] |
Known Issues¶
1. Create Type creation options are not supported¶
현재 생성 옵션에 대한 알려진 해결 방법은 없으며, 이러한 이유로 유형을 정의할 때 계정을 고려하지 않습니다.
2. Migrated code output is not functional¶
문이 불필요하게 변경되어 출력 코드에서 더 이상 함수를 발휘하지 못합니다. 이 문제는 적절한 변환이 이루어지면 해결될 것입니다.
관련 EWIs¶
SSC-EWI-0062: 사용자 지정 유형 사용법이 베리언트로 변경되었습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.
멤버 함수 정의¶
Oracle Create Type 문(UDT의)의 멤버 함수를 Snowflake로 변환하기 위한 변환 참조입니다.
위험
SnowConvert AI는 유형 멤버 함수 또는 유형 본문 정의를 여전히 인식하지 못합니다. 이 페이지는 향후 변환 참조용으로만 사용됩니다.
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
다른 클래스 정의와 마찬가지로 Oracle의 TYPE 은 그 특성에 따라 동작을 노출하는 메서드를 구현할 수 있습니다. MEMBER FUCTION 은 제한 사항으로 인해 기능적 동등성을 유지하기 위해 Snowflake의 저장 프로시저로 변환됩니다.
함수는 프로시저로 변환되므로, PL/SQL에 대한 변환 참조도 여기에 적용됩니다.
샘플 소스 패턴¶
Simple 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);
Simple 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 |
Known Issues¶
알려진 문제 없음.
관련 EWIs¶
SSC-EWI-0056: 지원되지 않는 Create Type입니다.
SSC-EWI-0062: 사용자 지정 유형 사용법이 베리언트로 변경되었습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.
SSC-EWI-OR0007: Create Type은 Snowflake에서 지원되지 않음
중첩된 테이블 유형 정의¶
Oracle Create Type 문(UDT의)의 중첩 테이블 베리언트를 Snowflake로 변환하기 위한 변환 참조입니다.
위험
SnowConvert AI는 이러한 정의를 인식만 할 뿐 이에 대한 변환은 지원하지 않으며 이에 대해 알려진 해결 방법은 없습니다.
설명¶
중첩된 테이블 유형은 이전에 존재하는 데이터 타입(다른 사용자 정의 유형 포함)의 임베디드 테이블 구조를 정의합니다. 배열 유형의 보다 강력한 버전으로 사용할 수 있습니다.
다른 유형과 달리 아직 알려진 해결 방법이나 가능한 변환이 없습니다.
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¶
!!!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;
Known Issues¶
1. Create Type creation options are not supported¶
현재로서는 이러한 생성 옵션에 대한 알려진 해결 방법이 없으므로 유형을 정의할 때 이러한 옵션은 고려되지 않습니다.
관련 EWIs¶
SSC-EWI-0073: 보류 중 함수 동등성 검토
SSC-EWI-0056: 지원되지 않는 Create Type입니다.
오브젝트 유형 정의¶
Oracle Create Type 문(UDT의)의 오브젝트 베리언트를 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 ***/!!!);
Nested Type Usage¶
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 |
Known Issues¶
1. Migrated code output is not the same¶
뷰 문이 불필요하게 변경되어 출력 코드에서 테이블이 더 이상 동일한 동작을 하지 않습니다. 이 문제를 수정하기 위한 작업 항목이 있습니다.
2. DML for User-defined Types is not being transformed¶
DML 테이블과 같이 내부에 사용자 정의 유형이 있는 요소와 상호 작용하는 요소는 변환되지 않습니다. 향후 이를 구현하기 위한 작업 항목이 있습니다.
3. Create Type creation options are not supported¶
현재 생성 옵션에 대한 알려진 해결 방법은 없으며, 이러한 이유로 유형을 정의할 때 계정을 고려하지 않습니다.
관련 EWIs¶
SSC-EWI-0056: 지원되지 않는 Create Type입니다.
SSC-EWI-0062: 사용자 지정 유형 사용법이 베리언트로 변경되었습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.
하위 유형 정의¶
Oracle Create Type 문(UDT의)의 하위 유형 베리언트를 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)
;
Known Issues¶
1. Create Type creation options are not supported¶
현재 생성 옵션에 대한 알려진 해결 방법은 없으며, 이러한 이유로 유형을 정의할 때 계정을 고려하지 않습니다.
관련 EWIs¶
SSC-EWI-0056: 지원되지 않는 Create Type입니다.
SSC-EWI-OR0007: Snowflake에서 지원하지 않는 Create Type입니다.