SnowConvert AI - Oracle - Tipo de dados Rowid

Descrição

Cada linha no banco de dados tem um endereço. (Referência da Linguagem Oracle SQL - Tipos de Dados Rowid)

ROWID DataType

Descrição

As linhas em tabelas organizadas em heap que são nativas do Oracle Database têm endereços de linha chamados rowids. Você pode examinar um endereço de linha rowid consultando a pseudocoluna ROWID. Os valores dessa pseudocoluna são cadeias de caracteres que representam o endereço de cada linha. Essas cadeias de caracteres têm o tipo de dados ROWID. Você também pode criar tabelas e clusters que contenham colunas reais com o tipo de dados ROWID. (Tipos de dados ROWID da referência de linguagem Oracle SQL)

ROWID

Copy

Amostra de padrões da origem

ROWID em Create Table

Oracle
CREATE TABLE rowid_table 
(
    rowid_column ROWID
);
Copy
Snowflake
CREATE OR REPLACE TABLE rowid_table
    (
        rowid_column VARCHAR(18) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWID DATA TYPE CONVERTED TO VARCHAR ***/!!!
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
    ;
Copy

Inserir dados na coluna ROWID

É possível inserir dados nas colunas ROWID se a inserção tiver um ROWID válido, conforme mostrado no exemplo abaixo. Infelizmente, não é permitido recuperar ROWID de uma tabela.

Oracle
INSERT INTO rowid_table VALUES ('AAATtCAAMAAAADLABD');

SELECT rowid_column FROM rowid_table;
Copy
Resultado

ROWID_COLUMN

AAATtCAAMAAAADLABD

Snowflake
INSERT INTO rowid_table
VALUES ('AAATtCAAMAAAADLABD');

SELECT rowid_column FROM
rowid_table;
Copy
Resultado

ROWID_COLUMN

AAATtCAAMAAAADLABD

Problemas conhecidos

Nota

Como o conjunto de resultados é muito grande, foi adicionada a cláusula Row Limiting. Você pode remover essa cláusula para recuperar todo o conjunto de resultados.

1. Recuperação de ROWID de uma tabela que não tem uma coluna explícita com este tipo de dados

Conforme mencionado no fórum do Snowflake, ROWID não é compatível com o Snowflake. A consulta a seguir exibe um erro no Snowflake, pois hr.employees não contém uma coluna ROWID.

Oracle

SELECT
    ROWID
FROM 
    hr.employees 
FETCH NEXT 10 ROWS ONLY;
Copy
Resultado

ROWID

AAATtCAAMAAAADLABD

AAATtCAAMAAAADLABV

AAATtCAAMAAAADLABX

AAATtCAAMAAAADLAAv

AAATtCAAMAAAADLAAV

AAATtCAAMAAAADLAAD

AAATtCAAMAAAADLABL

AAATtCAAMAAAADLAAP

AAATtCAAMAAAADLAA6

AAATtCAAMAAAADLABg

Snowflake
SELECT
    --** SSC-FDM-OR0030 - ROWID PSEUDOCOLUMN IS NOT SUPPORTED IN SNOWFLAKE, IT WAS CONVERTED TO NULL TO AVOID RUNTIME ERRORS **
    '' AS ROWID
FROM
    hr.employees
FETCH NEXT 10 ROWS ONLY;
Copy
Resultado

Perigo

Erro de compilação SQL: identificador inválido “ROWID”

Tipo de dados UROWID

Descrição

O Oracle usa rowids universais (urowids) para armazenar os endereços de tabelas organizadas por índices e estrangeiras. As tabelas organizadas por índices têm urowids lógicas e as tabelas estrangeiras têm urowids estrangeiras.(Tipo de dados UROWID da referência de linguagem Oracle SQL)

UROWID [(size)]

Copy

Amostra de padrões da origem

UROWID em Create Table

Oracle
CREATE TABLE urowid_table 
(
    urowid_column UROWID,
    urowid_sized_column UROWID(40)
);
Copy
Snowflake
CREATE OR REPLACE TABLE urowid_table
    (
        urowid_column VARCHAR(18) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - UROWID DATA TYPE CONVERTED TO VARCHAR ***/!!!,
        urowid_sized_column VARCHAR(18) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - UROWID DATA TYPE CONVERTED TO VARCHAR ***/!!!
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
    ;
Copy

Inserir dados na coluna UROWID

Assim como ROWID, é possível inserir dados em colunas UROWID se a inserção tiver um UROWID válido, mas recuperar de uma tabela não é permitido.

Oracle
INSERT INTO urowid_table VALUES ('*BAMAAJMCVUv+','*BAMAAJMCVUv+');

SELECT * FROM urowid_table;
Copy
Resultado

UROWID_COLUMN

UROWID_SIZED_COLUMN

*BAMAAJMCVUv+

*BAMAAJMCVUv+

Snowflake** SSC-FDM-0007 - MISSING DEPENDENT OBJECT «urowid_table» **
INSERT INTO urowid_table
VALUES ('*BAMAAJMCVUv+','*BAMAAJMCVUv+');

SELECT * FROM
urowid_table;
Copy
Resultado

UROWID_COLUMN

UROWID_SIZED_COLUMN

*BAMAAJMCVUv+

*BAMAAJMCVUv+

Problemas conhecidos

Nota

Como o conjunto de resultados é muito grande, foi adicionada a cláusula Row Limiting. Você pode remover essa cláusula para recuperar todo o conjunto de resultados.

1. Recuperando UROWID de uma tabela que não tem uma coluna explícita com esse tipo de dados

A consulta a seguir exibe um erro no Snowflake, pois hr.countries não contém uma coluna ROWID (conforme mencionado na documentação da Oracle, UROWID é acessado com a instrução SELECT. .. ROWID ).

Oracle

SELECT
    rowid,
    country_name
FROM
    hr.countries FETCH NEXT 10 ROWS ONLY;
Copy
Resultado

ROWID

COUNTRY_NAME

*BAMAAJMCQVL+

Argentina

*BAMAAJMCQVX+

Austrália

*BAMAAJMCQkX+

Bélgica

*BAMAAJMCQlL+

Brasil

*BAMAAJMCQ0H+

Canadá

*BAMAAJMCQ0j+

Suíça

*BAMAAJMCQ07+

China

*BAMAAJMCREX+

Alemanha

*BAMAAJMCREv+

Dinamarca

*BAMAAJMCRUf+

Egito

Snowflake
SELECT
        --** SSC-FDM-OR0030 - ROWID PSEUDOCOLUMN IS NOT SUPPORTED IN SNOWFLAKE, IT WAS CONVERTED TO NULL TO AVOID RUNTIME ERRORS **
        '' AS rowid,
        country_name
FROM
        hr.countries
FETCH NEXT 10 ROWS ONLY;
Copy
Resultado

Perigo

Erro de compilação SQL: identificador inválido “ROWID”

2. EWI should be displayed by SnowConvert AI

EWI deve ser exibido ao tentar selecionar a coluna UROWID. Há um item de trabalho para adicionar o EWI correspondente.

Perigo

Este problema foi marcado como crítico e será corrigido nas próximas versões.

EWIs relacionados

  1. SSC-EWI-0036: Tipo de dados convertido em outro tipo de dados.

  2. SSC-FDM-OR0030: ROWID pseudocolumn is not supported in Snowflake.