SnowConvert AI - Oracle - Criar tipo¶
This is a translation reference to convert Oracle Create Type Statements (UDTs) to snowflake
Descrição geral¶
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.
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
Limitações¶
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.
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.
Propriedades de tipo¶
Elas se referem às opções normalmente usadas ao utilizar OOP em PL/SQL: Persistable, Instantiable e Final.
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.
Opções de criação de fonte de tipo¶
Essas opções representam opções personalizadas relacionadas ao acesso e à consulta do tipo.
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¶
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.
Tipo de elemento de instrução |
Status atual de reconhecimento |
Status atual da tradução |
Tem soluções alternativas conhecidas |
|---|---|---|---|
Reconhecido. |
Translated to Snowflake |
Sim. |
|
Reconhecido. |
Não traduzido. |
Não. |
|
Reconhecido. |
Translated to Snowflake |
Sim. |
|
Reconhecido. |
Translated to Snowflake |
Limited. |
|
Reconhecido. |
Não traduzido. |
Sim. |
Problemas conhecidos¶
1. DML usages for Object Types — partial support¶
DDL definitions for User-Defined Types are translated to native Snowflake CREATE TYPE … AS OBJECT / … AS ARRAY where the shape is supported. Constructor calls (for example address_type('123 Main St', …) for object types and VARRAY_TYPE('a', 'b', 'c') for VARRAY / nested-table types) are now also translated to OBJECT_CONSTRUCT(…) :: <type> and ARRAY_CONSTRUCT(…) :: <type> respectively, in INSERT … VALUES, INSERT … SELECT, UPDATE … SET, top-level SELECT, and PL/SQL variable initialization. DML that relies on object-type member functions or other Oracle-specific UDT operations may still require manual review; an SSC-EWI-0073 is emitted in those cases.
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¶
This is a translation reference to convert the Array Variant of the Oracle Create Type Statements (UDTs) to Snowflake
Nota
Oracle VARRAY types are translated to Snowflake CREATE TYPE … AS ARRAY ( element_type ). Fixed varray capacity is not preserved; see SSC-FDM-0043. Column usages may still be migrated to VARIANT in older or mixed scenarios—verify generated DDL for your workload.
VARRAY and nested-table constructor calls (for example phone_list_typ_demo('2000-0000', '4000-0000')) used in INSERT, UPDATE and top-level SELECT are translated to ARRAY_CONSTRUCT(...) :: <type_name>. See VARRAY constructor calls in DML below.
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).
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.
Amostra de padrões da origem¶
Inserções para o uso da matriz¶
VARRAY and nested-table constructor calls used in INSERT … VALUES, INSERT … SELECT, UPDATE and top-level SELECT are translated to ARRAY_CONSTRUCT(...) and explicitly cast to the original UDT name with :: <type>, so column type checks against the UDT continue to succeed.
Oracle¶
Snowflake¶
VARRAY constructor calls in DML¶
The translator handles standalone constructor calls in INSERT … VALUES, INSERT … SELECT, UPDATE … SET, and top-level SELECT statements. For nested-table types defined with CREATE TYPE … AS TABLE OF … the same ARRAY_CONSTRUCT(...) :: <type> shape is produced.
Oracle¶
Snowflake¶
Oracle (top-level SELECT)¶
Snowflake¶
Uso do tipo de matriz¶
Oracle¶
Resultados¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[[“2000-0000”,”4000-0000”,”0000-0000”]] |
1 |
[[“8000-2000”,”0000-0000”,”5000-0000”]] |
Snowflake¶
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¶
This is a translation reference to convert the Member Functions of the Oracle Create Type Statements (UDTs) to 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¶
Snowflake¶
Função de membro Simple square()¶
Oracle¶
Resultados¶
T.COLUMN1.GET_SQUARE() |
|---|
25 |
Snowflake¶
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¶
This is a translation reference to convert the Nested Table Variant of the Oracle Create Type Statements (UDTs) to Snowflake
Nota
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.
Descrição¶
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.
Amostra de padrões da origem¶
Uso do tipo de tabela aninhada¶
Oracle¶
Snowflake¶
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¶
This is a translation reference to convert the Object Variant of the Oracle Create Type Statements (UDTs) to 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.
For the translation of object types, the type definition is mapped to Snowflake’s native CREATE TYPE … AS OBJECT (…) where the attribute list is supported, and constructor calls to the type are translated to OBJECT_CONSTRUCT(<field>, <value>, …) :: <type_name>. SnowConvert AI uses the symbol table to recover the field names from the original CREATE TYPE, so positional constructor arguments are mapped to the correct field names in upper-case. When the type symbol cannot be resolved (for example, because the CREATE TYPE is not part of the migrated source set), the constructor call is preserved and an SSC-EWI-0073 is emitted for manual review.
For legacy or partially-supported scenarios where the object type cannot be expressed natively, the column in dependent tables may still be migrated to VARIANT and an auxiliary view is added so that downstream SELECTs and views to the original table continue to work.
Amostra de padrões da origem¶
Object Type constructor calls¶
Object-type constructor calls are translated to OBJECT_CONSTRUCT('FIELD1', value1, 'FIELD2', value2, …) :: <type_name>. The cast to the original UDT name is preserved so column type checks and downstream OBJECT_INSERT / member access continue to work without changes. The transformation applies to constructor calls inside variable initialization, INSERT … VALUES, INSERT … SELECT, UPDATE … SET, and top-level SELECT expressions.
Nota
Field names in the generated OBJECT_CONSTRUCT keys are always upper-case (for example 'NAME', 'AGE'). Snowflake object key lookups are case-sensitive, so downstream references using lowercase or mixed-case semi-structured path syntax (for example obj:name) will return NULL. Use the exact upper-case key or quote it consistently throughout the migrated code.
Oracle¶
Snowflake¶
Oracle (constructor in INSERT … VALUES and UPDATE … SET)¶
Snowflake¶
Oracle (constructor when the type symbol is not in the migrated source)¶
Snowflake¶
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¶
Snowflake¶
Uso de Simple Type¶
Oracle¶
Resultados¶
CUSTOMER_TABLE_ID |
CUSTOMER_DATA |
|---|---|
1 |
[1, First Name 1, Last Name 1] |
2 |
[2, First Name 2, Last Name 2] |
Snowflake¶
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¶
Snowflake¶
Uso de Nested Type¶
Oracle¶
Resultados¶
CUSTOMER_ID |
CUSTOMER_DATA |
|---|---|
1 |
[Customer 1, [email@domain.com]] |
2 |
[Customer 2, [email2@domain.com]] |
Snowflake¶
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 — partial support¶
Constructor calls to object types (for example address_type('123 Main St', …)) and to collection types (VARRAY and nested-table) are now translated automatically when they appear in INSERT … VALUES, INSERT … SELECT, UPDATE … SET, and top-level SELECT expressions, as well as in PL/SQL variable initialization. See Object Type constructor calls above. Other DML shapes that depend on object-type member functions or implicit type promotion may still require manual review.
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¶
This is a translation reference to convert the Subtype Variant of the Oracle Create Type Statements (UDTs) to 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.
Amostra de padrões da origem¶
Subtipos em um tipo de objeto¶
Oracle¶
Snowflake¶
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.