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

Copy

Beispielhafte Quellcode-Muster

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

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;
Copy
Ergebnis

ROWID_COLUMN

AAATtCAAMAAAADLABD

Snowflake
INSERT INTO rowid_table
VALUES ('AAATtCAAMAAAADLABD');

SELECT rowid_column FROM
rowid_table;
Copy
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;
Copy
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;
Copy
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)]

Copy

Beispielhafte Quellcode-Muster

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

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;
Copy
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;
Copy
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 SELECTROWID aufgerufen).

Oracle

SELECT
    rowid,
    country_name
FROM
    hr.countries FETCH NEXT 10 ROWS ONLY;
Copy
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;
Copy
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

  1. SSC-EWI-0036: Datentyp, der in einen anderen Datentyp konvertiert wurde.

  2. SSC-FDM-OR0030: ROWID-Pseudospalte wird in Snowflake nicht unterstützt.