SnowConvert AI - Oracle - Type de données Rowid

Description

Chaque ligne de la base de données possède une adresse. (Référence linguistique Oracle SQL Types de données Rowid).

ROWID DataType

Description

Les lignes des tables organisées en tas qui sont natives de la base de données Oracle ont des adresses de ligne appelées « rowids ». Vous pouvez examiner l’adresse d’une ligne rowid en interrogeant la pseudocolonne ROWID. Les valeurs de cette pseudocolonne sont des chaînes représentant l’adresse de chaque ligne. Ces chaînes ont le type de données ROWID. Vous pouvez également créer des tables et des clusters qui contiennent des colonnes réelles ayant le type de données ROWID. (Référence linguistique Oracle SQL Types de donnéesROWID)

ROWID

Copy

Modèles d’échantillons de sources

ROWID dans 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

Insérer des données dans la colonne ROWID

Il est possible d’insérer des données dans les colonnes ROWID si l’insertion a un ROWID valide, comme le montre l’exemple ci-dessous. Malheureusement, la récupération du ROWID à partir d’une table n’est pas autorisée.

Oracle
INSERT INTO rowid_table VALUES ('AAATtCAAMAAAADLABD');

SELECT rowid_column FROM rowid_table;
Copy
Résultat

ROWID_COLUMN

AAATtCAAMAAAADLABD

Snowflake
INSERT INTO rowid_table
VALUES ('AAATtCAAMAAAADLABD');

SELECT rowid_column FROM
rowid_table;
Copy
Résultat

ROWID_COLUMN

AAATtCAAMAAAADLABD

Problèmes connus

Note

Le jeu de résultats étant trop large, la clause de limitation des lignes a été ajoutée. Vous pouvez supprimer cette clause pour récupérer le jeu de résultats.

1. Récupération ROWID d’une table qui ne possède pas de colonne explicite avec ce type de données

Comme indiqué dans le forum Snowflake, ROWID n’est pas pris en charge par Snowflake. La requête suivante affiche une erreur dans Snowflake car hr.employees ne contient pas de colonne ROWID.

Oracle

SELECT
    ROWID
FROM 
    hr.employees 
FETCH NEXT 10 ROWS ONLY;
Copy
Résultat

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
Résultat

Danger

Erreur de compilation SQL : l’identificateur « ROWID » n’est pas valide

Type de données UROWID

Description

Oracle utilise les « rowids univerels » (urowids) pour stocker les adresses des tables organisées en index et des tables étrangères. Les tables organisées sous forme d’index ont des urowids logiques et les tables étrangères ont des urowids étrangères. (Référence linguistique Oracle SQL Type de données UROWID)

UROWID [(size)]

Copy

Modèles d’échantillons de sources

UROWID dans 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

Insérer des données dans la colonne UROWID

Tout comme ROWID, il est possible d’insérer des données dans les colonnes UROWID si l’insertion a un UROWID valide, mais la récupération depuis une table n’est pas autorisée.

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

SELECT * FROM urowid_table;
Copy
Résultat

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
Résultat

UROWID_COLUMN

UROWID_SIZED_COLUMN

*BAMAAJMCVUv+

*BAMAAJMCVUv+

Problèmes connus

Note

Le jeu de résultats étant trop large, la clause de limitation des lignes a été ajoutée. Vous pouvez supprimer cette clause pour récupérer le jeu de résultats.

1. Récupération du UROWID d’une table qui n’a pas de colonne explicite avec ce type de données

La requête suivante affiche une erreur dans Snowflake car hr.countries ne contient pas de colonne ROWID (comme indiqué dans la documentation Oracle, UROWID est accessible avec l’instruction SELECTROWID).

Oracle

SELECT
    rowid,
    country_name
FROM
    hr.countries FETCH NEXT 10 ROWS ONLY;
Copy
Résultat

ROWID

COUNTRY_NAME

*BAMAAJMCQVL+

Argentine

*BAMAAJMCQVX+

Australie

*BAMAAJMCQkX+

Belgique

*BAMAAJMCQlL+

Brésil

*BAMAAJMCQ0H+

Canada

*BAMAAJMCQ0j+

Suisse

*BAMAAJMCQ07+

Chine

*BAMAAJMCREX+

Allemagne

*BAMAAJMCREv+

Danemark

*BAMAAJMCRUf+

Égypte

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
Résultat

Danger

Erreur de compilation SQL : l’identificateur « ROWID » n’est pas valide

2. EWI should be displayed by SnowConvert AI

EWI doit s’afficher lors de la sélection d’une colonne UROWID. Il y a un élément de travail auquel ajouter le correspondant EWI.

Danger

Ce problème a été marqué comme critique et sera corrigé dans les prochaines versions.

EWIs connexes

  1. SSC-EWI-0036: Type de données converti en autre type de données.

  2. SSC-FDM-OR0030 : la pseudocolonne ROWID n’est pas prise en charge dans Snowflake..