SnowConvert AI – Oracle – Rowid-Datentyp¶
Beschreibung¶
Jede Zeile in der Datenbank enthält eine Adresse. (Oracle SQL-Sprachreferenz – Rowid-Datentypen)
ROWID-DataType¶
Beschreibung¶
Die Zeilen in Heap-organisierten Tabellen, die in der Oracle-Datenbank nativ sind, haben Zeilenadressen, die Rowids genannt werden. Sie können eine Rowid-Zeilenadresse untersuchen, indem Sie die Pseudospalte ROWID abfragen. Die Werte dieser Pseudospalte sind Zeichenfolgen, die die Adresse der einzelnen Zeilen darstellen. Diese Zeichenfolgen haben den Datentyp ROWID. Sie können auch Tabellen und Cluster erstellen, die tatsächliche Spalten mit dem Datentyp ROWID enthalten. (Oracle SQL Language Reference ROWID Data Types)
ROWID
Beispielhafte Quellcode-Muster¶
ROWID in 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"}}'
;
Daten in die ROWID-Spalte einfügen¶
Es ist möglich, Daten in ROWID-Spalten einzufügen, wenn die Einfügung eine gültige ROWID hat, wie im folgenden Beispiel gezeigt. Leider ist der Abruf von ROWID aus einer Tabelle nicht erlaubt.
Oracle¶
INSERT INTO rowid_table VALUES ('AAATtCAAMAAAADLABD');
SELECT rowid_column FROM rowid_table;
Ergebnis¶
ROWID_COLUMN |
|---|
AAATtCAAMAAAADLABD |
Snowflake¶
INSERT INTO rowid_table
VALUES ('AAATtCAAMAAAADLABD');
SELECT rowid_column FROM
rowid_table;
Ergebnis¶
ROWID_COLUMN |
|---|
AAATtCAAMAAAADLABD |
Bekannte Probleme¶
Bemerkung
Da die Ergebnismenge zu groß ist, wurde die Zeilenbegrenzungsklausel hinzugefügt. Sie können diese Klausel entfernen, um die Ergebnismenge abzurufen.
1. Abrufen von ROWID aus einer Tabelle, die keine explizite Spalte mit diesem Datentyp hat
Wie im Snowflake-Forum erwähnt, wird ROWID nicht von Snowflake unterstützt. Die folgende Abfrage zeigt einen Fehler in Snowflake an, da die Spalte hr.employees keine ROWID enthält.
Oracle¶
SELECT
ROWID
FROM
hr.employees
FETCH NEXT 10 ROWS ONLY;
Ergebnis¶
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;
Ergebnis¶
Gefahr
SQL-Kompilierungsfehler: ungültiger Bezeichner „ROWID“
UROWID-Datentyp¶
Beschreibung¶
Oracle verwendet universelle Rowids (Urowids), um die Adressen von Index-organisierten und fremden Tabellen zu speichern. Index-organisierte Tabellen haben logische Urowids und fremde Tabellen haben fremde Urowids. (Oracle SQL Language Reference UROWID Data Type)
UROWID [(size)]
Beispielhafte Quellcode-Muster¶
UROWID in 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"}}'
;
Daten in die UROWID-Spalte einfügen¶
So wie bei ROWID ist es möglich, Daten in UROWID-Spalten einzufügen, wenn die Einfügung eine gültige UROWID hat, aber das Abrufen aus einer Tabelle nicht zulässig ist.
Oracle¶
INSERT INTO urowid_table VALUES ('*BAMAAJMCVUv+','*BAMAAJMCVUv+');
SELECT * FROM urowid_table;
Ergebnis¶
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;
Ergebnis¶
UROWID_COLUMN |
UROWID_SIZED_COLUMN |
|---|---|
*BAMAAJMCVUv+ |
*BAMAAJMCVUv+ |
Bekannte Probleme¶
Bemerkung
Da die Ergebnismenge zu groß ist, wurde die Zeilenbegrenzungsklausel hinzugefügt. Sie können diese Klausel entfernen, um die Ergebnismenge abzurufen.
1. Abrufen von UROWID aus einer Tabelle, die keine explizite Spalte mit diesem Datentyp hat
Die folgende Abfrage zeigt einen Fehler in Snowflake an, da hr.countries keine Spalte ROWID enthält (wie in der Oracle-Dokumentation erwähnt, UROWID wird mit der Anweisung SELECT … ROWID aufgerufen).
Oracle¶
SELECT
rowid,
country_name
FROM
hr.countries FETCH NEXT 10 ROWS ONLY;
Ergebnis¶
ROWID |
COUNTRY_NAME |
|---|---|
*BAMAAJMCQVL+ |
Argentinien |
*BAMAAJMCQVX+ |
Australien |
*BAMAAJMCQkX+ |
Belgien |
*BAMAAJMCQlL+ |
Brasilien |
*BAMAAJMCQ0H+ |
Kanada |
*BAMAAJMCQ0j+ |
Schweiz |
*BAMAAJMCQ07+ |
China |
*BAMAAJMCREX+ |
Deutschland |
*BAMAAJMCREv+ |
Dänemark |
*BAMAAJMCRUf+ |
Ägypten |
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;
Ergebnis¶
Gefahr
SQL-Kompilierungsfehler: ungültiger Bezeichner „ROWID“
2. EWI should be displayed by SnowConvert AI¶
EWI sollte angezeigt werden, wenn Sie versuchen, eine UROWID-Spalte auszuwählen. Es gibt ein Work-Element, um den entsprechenden EWI hinzuzufügen.
Gefahr
Dieses Problem wurde als kritisch gekennzeichnet und wird in den kommenden Releases behoben.
Zugehörige EWIs¶
SSC-EWI-0036: Datentyp, der in einen anderen Datentyp konvertiert wurde.
SSC-FDM-OR0030: ROWID-Pseudospalte wird in Snowflake nicht unterstützt.