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
Amostra de padrões da origem¶
ROWID em Create Table¶
Oracle¶
CREATE TABLE rowid_table
(
rowid_column ROWID
);
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"}}'
;
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;
Resultado¶
ROWID_COLUMN |
|---|
AAATtCAAMAAAADLABD |
Snowflake¶
INSERT INTO rowid_table
VALUES ('AAATtCAAMAAAADLABD');
SELECT rowid_column FROM
rowid_table;
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;
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;
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)]
Amostra de padrões da origem¶
UROWID em Create Table¶
Oracle¶
CREATE TABLE urowid_table
(
urowid_column UROWID,
urowid_sized_column UROWID(40)
);
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"}}'
;
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;
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;
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;
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;
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¶
SSC-EWI-0036: Tipo de dados convertido em outro tipo de dados.
SSC-FDM-OR0030: ROWID pseudocolumn is not supported in Snowflake.