SnowConvert AI - Oracle - Criar tipo¶
Esta é uma referência de tradução para converter instruções Oracle Create Type (de UDT) para o Snowflake
Descrição geral¶
Um dos recursos mais importantes que o mecanismo de banco de dados Oracle oferece é uma abordagem orientada a objetos. PL/SQL oferece recursos além de outros bancos de dados relacionais na forma de OOP usando instruções semelhantes ao Java na forma de pacotes, funções, tabelas e tipos. Este documento abrangerá o último e como o SnowConvert AI o resolve, mantendo-se em conformidade com a funcionalidade.
O Oracle é compatível com as seguintes especificações:
Tipo de dados abstrato (ADT) (incluindo um tipo de objeto SQLJ).
Tipo de matriz variável autônoma (varray).
Tipo de tabela aninhada autônoma.
Tipo de objeto incompleto.
Tudo isso de acordo com as informações encontradas na documentação da instrução Oracle Create Type
CREATE [ OR REPLACE ] [ EDITIONABLE | NONEDITIONAL ] TYPE <type name>
[ <type source creation options> ]
[<type definition>]
[ <type properties> ]
Limitações¶
O Snowflake não oferece suporte a tipos de dados definidos pelo usuário, de acordo com sua documentação online Tipos de dados sem suporte, mas oferece suporte a Tipos de dados semiestruturados, que podem ser usados para imitar a estrutura semelhante à hierarquia da maioria dos tipos definidos pelo usuário. Por esse motivo, há vários recursos de tipo que não têm solução alternativa.
A seguir, os recursos de Tipos definidos pelo usuário para os quais NO propõe uma solução alternativa:
Subtipos: Hierarquia de tipos¶
Essas instruções não são compatíveis com o Snowflake. O SnowConvert AI apenas as reconhece, mas nenhuma tradução é oferecida.
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);
/
Propriedades de tipo¶
Elas se referem às opções normalmente usadas ao utilizar OOP em PL/SQL: Persistable, Instantiable e Final.
CREATE OR REPLACE TYPE type1 AS OBJECT () NOT FINAL NOT INSTANTIABLE NOT PERSISTABLE;
CREATE OR REPLACE TYPE type2 AS OBJECT () FINAL INSTANTIABLE PERSISTABLE;
Tipo de tabela aninhada¶
Essas instruções não são compatíveis com o Snowflake. O SnowConvert AI apenas as reconhece, mas nenhuma tradução é oferecida.
CREATE TYPE textdoc_typ AS OBJECT
( document_typ VARCHAR2(32)
, formatted_doc BLOB
) ;
/
CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
/
Opções de criação de fonte de tipo¶
Essas opções representam opções personalizadas relacionadas ao acesso e à consulta do tipo.
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 ();
Soluções alternativas propostas¶
Sobre a definição de tipos¶
Para a definição, a solução proposta é criar um tipo de dados semiestruturado para imitar o tipo de dados do Oracle.
Sobre a função de membro types¶
Para as funções de membro que contêm lógica e DML, a solução proposta depende de auxiliares para converter isso em procedimentos armazenados.
Suporte atual do SnowConvert AI¶
A próxima tabela mostra um resumo do suporte atual fornecido pela ferramenta SnowConvert AI. Tenha em conta que as traduções podem ainda não ser finais, e mais trabalho pode ser necessário.
Tipo de elemento de instrução |
Status atual de reconhecimento |
Status atual da tradução |
Tem soluções alternativas conhecidas |
|---|---|---|---|
Reconhecido. |
Parcialmente traduzido. |
Sim. |
|
Reconhecido. |
Não traduzido. |
Não. |
|
Reconhecido. |
Não traduzido. |
Sim. |
|
Reconhecido. |
Não traduzido. |
Não. |
|
Reconhecido. |
Não traduzido. |
Sim. |
Problemas conhecidos¶
1. DML usages for Object Types are not being transformed¶
No momento, apenas as definições do DDL que usam tipos definidos pelo usuário estão sendo transformadas em Variant. Isso significa que todas as inserções, atualizações ou exclusões que usam tipos definidos pelo usuário não estão sendo transformadas e precisam ser transformadas manualmente. Não há EWI para isso, mas há um item de trabalho para adicionar esse EWI correspondente.
2. Create Type creation options are not supported¶
No momento, não há nenhuma solução alternativa conhecida para nenhuma das opções de criação; por esse motivo, elas não são levadas em consideração ao definir o tipo.
Definição do tipo de matriz¶
Este é um guia de tradução para converter a variante de matriz das instruções Create Type do Oracle. (UDTdo) para Snowflake
Perigo
O SnowConvert AI apenas reconhece essas definições e, por enquanto, não oferece suporte a nenhuma tradução para elas. Esta página é usada apenas como referência futura para traduções.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Array Types definem uma estrutura de matriz de um tipo de dado existente anteriormente (incluindo outros Custom Types).
Para a conversão de tipos de matriz, a definição do tipo é substituída por um tipo de dados semiestruturado e, em seguida, é expandida em qualquer uso no código. Isso significa pegar a definição do tipo e depois expandi-la no código original.
CREATE TYPE <type name>
AS { VARRAY | [VARYING] ARRAY } ( <size limit> ) OF <data type>
Amostra de padrões da origem¶
Inserções para o uso da matriz¶
Os próximos dados serão inseridos na tabela antes de consultar select. Observe que, no momento, essas inserções precisam ser migradas manualmente para o 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');
Uso do tipo de matriz¶
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;
/
Resultados¶
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;
Resultados¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[[“2000-0000”, “4000-0000”, “0000-0000”]] |
1 |
[[“8000-2000”, “0000-0000”, “5000-0000”]] |
Problemas conhecidos¶
1. Create Type creation options are not supported¶
No momento, não há nenhuma solução alternativa conhecida para nenhuma das opções de criação; por esse motivo, elas não são levadas em consideração ao definir o tipo.
2. Migrated code output is not functional¶
As instruções estão sendo alteradas desnecessariamente, o que faz com que elas não sejam mais funcionais no código de saída. Isso será resolvido quando houver uma transformação adequada para elas.
EWIs relacionados¶
SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.
SSC-EWI-0073: Revisão de equivalência funcional pendente.
Definições de funções de membro¶
Este é um guia de tradução para converter as funções membro das instruções Create Type do Oracle. (de UDT) para Snowflake
Perigo
O SnowConvert AI ainda não reconhece funções de membro nem definições de corpo do tipo. Esta página é usada apenas como uma referência futura para tradução.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Como outras definições de classe, o TYPE da Oracle pode implementar métodos para expor comportamentos com base em seus atributos. MEMBER FUCTION serão transformados em procedimentos armazenados do Snowflake, para manter a equivalência funcional devido às limitações.
Como as funções estão sendo transformadas em procedimentos, a referência de transformação para PL/SQL também se aplica aqui.
Amostra de padrões da origem¶
Inserções para a função de membro Simple square()¶
Os próximos dados serão inseridos na tabela antes de consultar select. Observe que, no momento, essas inserções precisam ser migradas manualmente para o 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);
Função de membro 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;
/
Resultados¶
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;
Resultados¶
GET_SQUARE() |
|---|
25 |
Problemas conhecidos¶
Nenhum problema conhecido.
EWIs relacionados¶
SSC-EWI-0056: Criar tipo não suportado.
SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.
SSC-EWI-0073: Revisão de equivalência funcional pendente.
SSC-EWI-OR0007: Create Type não compatível no Snowflake
Definição do tipo de tabela aninhada¶
Este é um guia de tradução para converter a variante de tabela aninhada das instruções Create Type do Oracle. (de UDT) para Snowflake
Perigo
O SnowConvert AI apenas reconhece estas definições, não oferece suporte a nenhuma tradução e não há nenhuma solução alternativa para elas.
Descrição¶
Os tipos de tabela aninhada definem uma estrutura de tabela incorporada de um tipo de dados existente anteriormente (incluindo outros tipos personalizados). Eles podem ser usados como uma versão mais avançada do tipo de matriz.
Ao contrário dos outros tipos, ainda não há uma solução alternativa conhecida ou uma conversão possível para eles.
CREATE TYPE <type name> AS TABLE OF <data type>
Amostra de padrões da origem¶
Uso do tipo de tabela aninhada¶
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;
Problemas conhecidos¶
1. Create Type creation options are not supported¶
Atualmente, não há nenhuma solução alternativa conhecida para nenhuma das opções de criação; por esse motivo, elas não são levadas em conta na definição do tipo.
EWIs relacionados¶
SSC-EWI-0073: Revisão de equivalência funcional pendente
SSC-EWI-0056: Criar tipo não suportado.
Definição do tipo de objeto¶
Esta é uma referência de tradução para converter a variante de objeto das instruções do tipo Oracle Create (de UDT) para Snowflake
Nota
O SnowConvert AI oferece suporte a uma tradução para as próprias definições de tipo de objeto. No entanto, seus usos ainda são um trabalho em andamento.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Os tipos de objeto definem uma estrutura de dados semelhante a um registro, com as vantagens adicionais das definições de função de membro. Isso significa que seus dados podem ser usados em algum comportamento dentro do tipo.
Para a conversão de tipos de objetos, a definição do tipo é substituída por um tipo de dados semiestruturado e, em seguida, é expandida em qualquer uso no código. No caso das tabelas, isso significa substituir a coluna por uma variante e adicionar uma exibição para que as seleções (e também exibições) da tabela original ainda possam funcionar.
CREATE TYPE <type name> AS OBJECT
( [{<type column definition> | type method definition } , ...]);
Amostra de padrões da origem¶
Uso de Inserts for Simple Type¶
Os próximos dados serão inseridos na tabela antes de consultar select. Observe que, no momento, essas inserções precisam ser migradas manualmente para o 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 ***/!!!);
Uso de Simple Type¶
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;
Resultados¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[1, First Name 1, Last Name 1] |
2 |
[2, First Name 2, Last Name 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;
Resultados¶
CUSTOMER_TABLE_ID |
CUST_ID |
CUST_FIRST_NAME |
CUST_LAST_NAME |
|---|---|---|---|
1 |
1 |
Nome 1 |
Sobrenome 1 |
2 |
2 |
Nome 2 |
Sobrenome 2 |
Uso de Inserts for Nested Type¶
Essas instruções precisam ser colocadas entre a criação da tabela e a instrução select para testar a saída.
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 ***/!!!);
Uso de Nested Type¶
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;
Resultados¶
CUSTOMER_ID |
CUSTOMER_DATA |
|---|---|
1 |
[Customer 1, [email@domain.com]] |
2 |
[Customer 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;
Resultados¶
CUSTOMER_ID |
CUST_NAME |
CUST_EMAIL |
|---|---|---|
1 |
Cliente 1 |
email@domain.com |
2 |
Cliente 2 |
email2@domain.com |
Problemas conhecidos¶
1. Migrated code output is not the same¶
A instrução view está sendo alterada desnecessariamente, o que faz com que a tabela não tenha mais o mesmo comportamento no código de saída. Há um item de trabalho para corrigir esse problema.
2. DML for User-defined Types is not being transformed¶
DML que interage com elementos que têm tipos definidos pelo usuário (como uma tabela) não estão sendo transformados. Há um item de trabalho para implementar isso no futuro.
3. Create Type creation options are not supported¶
No momento, não há nenhuma solução alternativa conhecida para nenhuma das opções de criação; por esse motivo, elas não são levadas em consideração ao definir o tipo.
EWIs relacionados¶
SSC-EWI-0056: Criar tipo não suportado.
SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.
SSC-EWI-0073: Revisão de equivalência funcional pendente.
Definição do subtipo¶
Esta é uma referência de tradução para converter a Variante de Subtipo das instruções Create Type do Oracle (de UDT) para Snowflake
Perigo
Como não há soluções alternativas conhecidas, o SnowConvert AI apenas reconhece essas definições e não oferece suporte a nenhuma tradução para elas.
Descrição¶
Os subtipos definem uma estrutura de dados semelhante a um registro, com as vantagens adicionais das definições de função de membro. Isso significa que seus dados podem ser usados em algum comportamento dentro do tipo. Ao contrário dos tipos de objeto, os subtipos são criados como uma extensão de outro tipo existente.
Com relação às definições de subtipo, ainda não há conversão, mas pode haver uma maneira de reimplementá-las usando Definições de tipo de objeto e, em seguida, usando sua respectiva conversão.
CREATE TYPE <type name> UNDER <super type name>
( [{<type column definition> | type method definition } , ...]);
Amostra de padrões da origem¶
Subtipos em um tipo de objeto¶
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)
;
Problemas conhecidos¶
1. Create Type creation options are not supported¶
No momento, não há nenhuma solução alternativa conhecida para nenhuma das opções de criação; por esse motivo, elas não são levadas em consideração ao definir o tipo.
EWIs relacionados¶
SSC-EWI-0056: Criar tipo não suportado.
SSC-EWI-OR0007: Criar tipo não é compatível com o Snowflake.