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
Modèles d’échantillons de sources¶
ROWID dans 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"}}'
;
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;
Résultat¶
ROWID_COLUMN |
|---|
AAATtCAAMAAAADLABD |
Snowflake¶
INSERT INTO rowid_table
VALUES ('AAATtCAAMAAAADLABD');
SELECT rowid_column FROM
rowid_table;
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;
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;
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)]
Modèles d’échantillons de sources¶
UROWID dans 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"}}'
;
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;
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;
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 SELECT … ROWID).
Oracle¶
SELECT
rowid,
country_name
FROM
hr.countries FETCH NEXT 10 ROWS ONLY;
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;
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¶
SSC-EWI-0036: Type de données converti en autre type de données.
SSC-FDM-OR0030 : la pseudocolonne ROWID n’est pas prise en charge dans Snowflake..