SnowConvert AI - Oracle - Rowidデータ型¶
説明¶
データベースの各行にはアドレスがあります。( Oracle SQL言語リファレンスRowidデータ型 )
ROWID に DataType¶
説明¶
Oracleデータベースのネイティブなヒープ組織化テーブルの行は、rowidと呼ばれる行アドレスを持っています。擬似列 ROWID をクエリすることで、rowidの行アドレスを調べることができます。この疑似列の値は、各行のアドレスを表す文字列です。これらの文字列のデータ型は ROWID です。ROWID データ型を持つ実際の列を含むテーブルやクラスタを作成することもできます。(Oracle SQL 言語リファレンス ROWID データ型)
ROWID
サンプルソースパターン¶
テーブル作成時の ROWID¶
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"}}'
;
ROWID 列にデータを挿入する¶
以下の例に示すように、挿入に有効な ROWID があれば、 ROWID 列にデータを挿入することが可能です。残念ながら、テーブルから ROWID を取得することはできません。
Oracle¶
INSERT INTO rowid_table VALUES ('AAATtCAAMAAAADLABD');
SELECT rowid_column FROM rowid_table;
結果¶
ROWID_COLUMN |
|---|
AAATtCAAMAAAADLABD |
Snowflake¶
INSERT INTO rowid_table
VALUES ('AAATtCAAMAAAADLABD');
SELECT rowid_column FROM
rowid_table;
結果¶
ROWID_COLUMN |
|---|
AAATtCAAMAAAADLABD |
既知の問題¶
注釈
結果セットが大きすぎるため、行制限句 が追加されました。この句を削除すると、結果セット全体を取得できます。
1.このデータ型を持つ明示的な列を持たないテーブルからROWIDを取得する
Snowflakeフォーラム で言及されているように、 ROWID はSnowflakeではサポートされていません。以下のクエリは、hr.employeesに ROWID 列が含まれていないため、Snowflakeでエラーが表示されます。
Oracle¶
SELECT
ROWID
FROM
hr.employees
FETCH NEXT 10 ROWS ONLY;
結果¶
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;
結果¶
危険
SQL コンパイルエラー: 無効な識別子「ROWID」
UROWID データ型¶
説明¶
Oracleは、ユニバーサルrowids(urowids)を使用して、インデックス編成テーブルと外部テーブルのアドレスを格納します。インデックス編成テーブルは論理的urowidsを持ち、外部テーブルは外部urowidsを持ちます。(Oracle SQL 言語リファレンス UROWID データ型)
UROWID [(size)]
サンプルソースパターン¶
テーブル作成時の UROWID¶
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"}}'
;
UROWID 列にデータを挿入する¶
ROWID と同様に、UROWIDの列にデータを挿入することは、挿入に有効なUROWIDがあれば可能ですが、テーブルから取得することはできません。
Oracle¶
INSERT INTO urowid_table VALUES ('*BAMAAJMCVUv+','*BAMAAJMCVUv+');
SELECT * FROM urowid_table;
結果¶
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;
結果¶
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;
結果¶
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;
結果¶
危険
SQL コンパイルエラー: 無効な識別子「ROWID」
2. EWI should be displayed by SnowConvert AI¶
EWIは、UROWID列を選択しようとしたときに表示されるはずです。対応するEWIを追加する作業項目があります。
危険
この問題はクリティカルとしてマークされており、今後のリリースで修正される予定です。
関連 EWIs¶
SSC-EWI-0036:データ型が別のデータ型に変換されました。
SSC-FDM-OR0030 :ROWID疑似列はSnowflakeでサポートされていません。