SnowConvert AI - Oracle - Rowidデータ型

説明

データベースの各行にはアドレスがあります。( Oracle SQL言語リファレンスRowidデータ型

ROWID に DataType

説明

Oracleデータベースのネイティブなヒープ組織化テーブルの行は、rowidと呼ばれる行アドレスを持っています。擬似列 ROWID をクエリすることで、rowidの行アドレスを調べることができます。この疑似列の値は、各行のアドレスを表す文字列です。これらの文字列のデータ型は ROWID です。ROWID データ型を持つ実際の列を含むテーブルやクラスタを作成することもできます。(Oracle SQL 言語リファレンス ROWID データ型)

ROWID

Copy

サンプルソースパターン

テーブル作成時の ROWID

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

ROWID 列にデータを挿入する

以下の例に示すように、挿入に有効な ROWID があれば、 ROWID 列にデータを挿入することが可能です。残念ながら、テーブルから ROWID を取得することはできません。

Oracle
INSERT INTO rowid_table VALUES ('AAATtCAAMAAAADLABD');

SELECT rowid_column FROM rowid_table;
Copy
結果

ROWID_COLUMN

AAATtCAAMAAAADLABD

Snowflake
INSERT INTO rowid_table
VALUES ('AAATtCAAMAAAADLABD');

SELECT rowid_column FROM
rowid_table;
Copy
結果

ROWID_COLUMN

AAATtCAAMAAAADLABD

既知の問題

注釈

結果セットが大きすぎるため、行制限句 が追加されました。この句を削除すると、結果セット全体を取得できます。

1.このデータ型を持つ明示的な列を持たないテーブルからROWIDを取得する

Snowflakeフォーラム で言及されているように、 ROWID はSnowflakeではサポートされていません。以下のクエリは、hr.employeesに ROWID 列が含まれていないため、Snowflakeでエラーが表示されます。

Oracle

SELECT
    ROWID
FROM 
    hr.employees 
FETCH NEXT 10 ROWS ONLY;
Copy
結果

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
結果

危険

SQL コンパイルエラー: 無効な識別子「ROWID」

UROWID データ型

説明

Oracleは、ユニバーサルrowids(urowids)を使用して、インデックス編成テーブルと外部テーブルのアドレスを格納します。インデックス編成テーブルは論理的urowidsを持ち、外部テーブルは外部urowidsを持ちます。(Oracle SQL 言語リファレンス UROWID データ型)

UROWID [(size)]

Copy

サンプルソースパターン

テーブル作成時の UROWID

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

UROWID 列にデータを挿入する

ROWID と同様に、UROWIDの列にデータを挿入することは、挿入に有効なUROWIDがあれば可能ですが、テーブルから取得することはできません。

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

SELECT * FROM urowid_table;
Copy
結果

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
結果

UROWID_COLUMN

UROWID_SIZED_COLUMN

*BAMAAJMCVUv+

*BAMAAJMCVUv+

既知の問題

注釈

結果セットが大きすぎるため、行制限句 が追加されました。この句を削除すると、結果セット全体を取得できます。

1.このデータ型を持つ明示的な列を持たないテーブルから UROWID を取得する

hr.countriesに ROWID (Oracleのドキュメント に記載されているように、 UROWID は SELECT ... ROWID ステートメントでアクセスされます)列が含まれていないため、以下のクエリはSnowflakeでエラーを表示します。

Oracle

SELECT
    rowid,
    country_name
FROM
    hr.countries FETCH NEXT 10 ROWS ONLY;
Copy
結果

ROWID

COUNTRY_NAME

*BAMAAJMCQVL+

アルゼンチン

*BAMAAJMCQVX+

オーストラリア

*BAMAAJMCQkX+

ベルギー

*BAMAAJMCQlL+

ブラジル

*BAMAAJMCQ0H+

カナダ

*BAMAAJMCQ0j+

スイス

*BAMAAJMCQ07+

中国

*BAMAAJMCREX+

ドイツ

*BAMAAJMCREv+

デンマーク

*BAMAAJMCRUf+

エジプト

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
結果

危険

SQL コンパイルエラー: 無効な識別子「ROWID」

2. EWI should be displayed by SnowConvert AI

EWIは、UROWID列を選択しようとしたときに表示されるはずです。対応するEWIを追加する作業項目があります。

危険

この問題はクリティカルとしてマークされており、今後のリリースで修正される予定です。

関連 EWIs

  1. SSC-EWI-0036:データ型が別のデータ型に変換されました。

  2. SSC-FDM-OR0030 :ROWID疑似列はSnowflakeでサポートされていません。