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

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

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;
Copy

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

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

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

Definições de tipo de objeto

Reconhecido.

Parcialmente traduzido.

Sim.

Definições de subtipo

Reconhecido.

Não traduzido.

Não.

Definições de tipo de matriz

Reconhecido.

Não traduzido.

Sim.

Definições da tabela aninhada

Reconhecido.

Não traduzido.

Não.

Definições da função de membro

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

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

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

  1. SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.

  2. 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));
Copy
Snowflake
INSERT INTO table_member_function_demo (column1)
SELECT OBJECT_CONSTRUCT('a1', 5);
Copy

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;
/
Copy
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;
Copy
Resultados

GET_SQUARE()

25

Problemas conhecidos

Nenhum problema conhecido.

EWIs relacionados

  1. SSC-EWI-0056: Criar tipo não suportado.

  2. SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.

  3. SSC-EWI-0073: Revisão de equivalência funcional pendente.

  4. 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>
Copy

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

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

  1. SSC-EWI-0073: Revisão de equivalência funcional pendente

  2. 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 } , ...]);
Copy

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

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;
Copy
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;
Copy
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')));
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

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;
Copy
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;
Copy
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

  1. SSC-EWI-0056: Criar tipo não suportado.

  2. SSC-EWI-0062: O uso do tipo personalizado foi alterado para variante.

  3. 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 } , ...]);
Copy

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

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

  1. SSC-EWI-0056: Criar tipo não suportado.

  2. SSC-EWI-OR0007: Criar tipo não é compatível com o Snowflake.