SnowConvert AI - Oracle COLLECTIONS AND RECORDS¶
Oracle COLLECTIONS および RECORDS を Snowflakeスクリプトに変換するための変換リファレンス
警告
このセクションは進行中であり、情報は将来変更される可能性があります。
概要¶
PL/SQL では、コレクションと記録の2種類の複合データ型を定義できます。複合とは、内部コンポーネントを持つ値を格納するデータ型のことです。
コレクションでは、内部コンポーネントは常に同じデータ型を持ち、要素と呼ばれます。
記録では、内部コンポーネントは異なるデータ型を持つことができ、フィールドと呼ばれます。(Oracle PL/SQL 言語リファレンス COLLECTIONS AND RECORDS)
注釈
一部の回避策は重複しており、両方のシナリオで機能する可能性があるため、[CREATE TYPE 文の変換リファレンス](../sql-translation-reference/create_type.md)を考慮してください。
制限事項¶
Snowflakeは、オンラインドキュメント サポートされていないデータ型 によると、 PL コレクションと記録を含むユーザー定義データ型をサポートしていませんが、 半構造化データ型 をサポートしており、これは記録の階層のような構造とコレクションユーザー定義型の要素構造の両方を模倣するために使用することができます。このため、回避策がない機能のタイプが複数あります。
以下は、 NO 回避策が提案されている機能です。
変数のサイズは 16MB を超えることはできません¶
Snowflakeは VARIANT、 OBJECT、 ARRAY の最大サイズを 16MBs にセットします。つまり、記録、コレクション、またはいずれかの要素がこのサイズを超えると、ランタイムエラーが発生します。
Varrayの容量を制限することはできません¶
OracleのVarraysは、その中の要素数を制限することができます。これはSnowflakeではサポートされていません。
提案されている回避策¶
記録タイプの定義について¶
提案されている回避策は、Oracleのデータ型を模倣するために「OBJECT」半構造化データ型を使用することです。
コレクションタイプの定義について¶
移行するコレクションのタイプによって、2つの異なる回避策があります。
連想配列は、「OBJECT」半構造化データ型に変更されることが提案されています。
Varraysとネストされたテーブル配列は、「ARRAY」半構造化データ型に変更されることが提案されています。
現在の SnowConvert AI サポート¶
The next table shows a summary of the current support provided by the SnowConvert AI tool. Please keep in mind that translations may still not be final, and more work may be needed.
サブ機能 |
現在の認識ステータス |
現在の変換ステータス |
既知の回避策がある |
|---|---|---|---|
[レコードタイプ定義](#record-type-definition) |
認識されています。 |
変換されていません。 |
あり。 |
[連想配列型の定義](#associative-array-type-definition) |
認識されません。 |
変換されていません。 |
あり。 |
[Varray型の定義](#varray-type-definition) |
認識されています。 |
変換されていません。 |
あり。 |
[ネストされたテーブルの配列型定義](#nested-table-array-type-definition) |
認識されています。 |
変換されていません。 |
あり。 |
既知の問題¶
1.連想配列はネストされたテーブルとみなされます¶
現在、 SnowConvert AI は連想配列とネストされたテーブルを区別していないため、同じ評価カウントで混在しています。
連想配列型の定義¶
これは、Oracleの連想配列宣言をSnowflakeに変換するための変換リファレンスです
警告
このセクションは進行中であり、情報は将来変更される可能性があります。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
連想配列(以前は PL/SQL テーブルまたはインデックスバイテーブルと呼ばれていました)はキー値のペアのセットです。各キーは一意なインデックスで、構文
variable_name(index)で関連する値を探すのに使われます。
インデックスのデータ型は、文字列型(VARCHAR2、VARCHAR、STRING、またはLONG)またはPLS_INTEGERのいずれかです。インデックスは作成順ではなく、ソート順で格納されます。文字列型の場合、ソート順は初期化パラメーターNLS_SORTとNLS_COMPによって決定されます。
警告
PL/SQL NESTED TABLE 型定義と混同しないでください。
翻訳のために、型定義は OBJECT 半構造化データ型 に置き換えられ、その使用はあらゆる操作にわたって適宜変更されます。
To define an Associative Array type, the syntax is as follows:
この型の変数を宣言するには
サンプルソースパターン¶
Varcharインデックス付き連想配列¶
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
1 |
3 |
4 |
2 |
3 |
Snowflake¶
OBJECT_INSERT の「true」パラメーターに注意してください。これは、その要素がすでに配列内に存在する場合に、その要素が更新されるようにするためです。
結果¶
DBMS に OUTPUT |
|---|
1 |
3 |
4 |
2 |
3 |
数値インデックス付き連想配列¶
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Snowflake¶
数値は、操作が必要とするときに適宜varcharに変換されることに注意してください。さらに、 OBJECT_INSERT の「true」パラメーターに注意してください。これは、その要素がすでに配列内に存在する場合に、その要素が更新されるようにするためです。
結果¶
DBMS に OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
記録要素数値インデックス付き連想配列¶
この場合、連想配列は記録構造で構成されており、この構造を保持する必要があります。そのために、挿入に関する操作がさらに追加されました。
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Snowflake¶
このシナリオでは、挿入/更新は、連想配列内の記録の自動作成を想定しており、新しい記録を作成するときにこれを考慮する必要があります。
結果¶
DBMS に OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
既知の問題¶
1.現在は認識されていません¶
SnowConvert AI はこれらのコレクションをネストされたテーブル配列として扱います。これを修正するための作業アイテムがあります。
関連 EWIs¶
関連 EWIs はありません。
コレクションメソッド¶
これは、OracleコレクションメソッドをSnowflakeに変換するための変換リファレンスです
警告
このセクションは進行中であり、情報は将来変更される可能性があります
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
コレクションメソッドは、 PL/SQL サブプログラムで、コレクションに関する情報を返す関数、またはコレクションを操作するプロシージャです。コレクションメソッドは、コレクションを使いやすくし、アプリケーションを保守しやすくします。
これらのメソッドの一部は、ネイティブのSnowflake半構造化操作にマッピングできます。できないもの、あるいは違いがあるものは、 UDF の実装にマッピングされます。
現在の SnowConvert AI サポート¶
The next table shows a summary of the current support provided by the SnowConvert AI tool. Please keep in mind that translations may still not be final, and more work may be needed.
メソッド |
現在の認識ステータス |
現在の変換ステータス |
マッピング先 |
|---|---|---|---|
[DELETE](#delete) |
認識されません。 |
変換されていません。 |
UDF |
[TRIM](#trim) |
認識されません。 |
変換されていません。 |
UDF (定義予定) |
[EXTEND](#extend) |
認識されません。 |
変換されていません。 |
UDF |
[EXISTS](#exists) |
認識されません。 |
変換されていません。 |
[ARRAY_CONTAINS](https://docs.snowflake.com/en/sql-reference/functions/array_contains.html) |
[FIRST](#firstlast) |
認識されません。 |
変換されていません。 |
UDF |
[LAST](#firstlast) |
認識されません。 |
変換されていません。 |
UDF |
[COUNT](#count) |
認識されません。 |
変換されていません。 |
[ARRAY_SIZE](https://docs.snowflake.com/en/sql-reference/functions/array_size.html) |
[LIMIT](#limit) |
認識されません。 |
変換されていません。 |
サポート対象外です。 |
[PRIOR](#priornext) |
認識されません。 |
変換されていません。 |
UDF (定義予定) |
[NEXT](#priornext) |
認識されません。 |
変換されていません。 |
UDF (定義予定) |
サンプルソースパターン¶
COUNT¶
このメソッドは、コレクション内の「未定義ではない」(nullと混同しないでください)要素の数を返します(ネストされたテーブルは、これらの要素が間に残ったまままばらになることがあります)。連想配列では、配列内のキーの数を返します。
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
2 |
3 |
4 |
Snowflake¶
Snowflakeの同等のものは、 ARRAY_SIZE メソッドです。
結果¶
DBMS に OUTPUT |
|---|
2 |
3 |
4 |
EXISTS¶
このメソッドは、指定された要素がコレクション内に含まれる場合にtrueを返します。連想配列では、キーが含まれているかどうかを調べます。
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
2 |
3 |
4 |
Snowflake¶
Snowflakeの同等のものは、 ARRAY_CONTAINS メソッドです。Varchar要素を使用する場合は、バリアントへのキャストが必要であることに注意してください。
結果¶
DBMS に OUTPUT |
|---|
2 |
3 |
4 |
FIRST/LAST¶
この2つのメソッドは、それぞれコレクションの最初と最後の要素を返します。コレクションが空の場合はnullを返します。この操作は UDF にマッピングされており、今後の改訂で追加される予定です。
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
abc |
bca |
--これらの空白はnullと評価されたために発生します |
1 |
4 |
Snowflake¶
UDFs¶
結果¶
DBMS に OUTPUT |
|---|
abc |
bca |
--これらの空白はnullと評価されたために発生します |
1 |
4 |
DELETE¶
このメソッドは、コレクションから要素を削除するために使用します。バリアントは3種類あります。
.DELETE はすべての要素を削除します。
.DELETE(n)はインデックスが「n」にマッチする要素を削除します。
.DELETE(n, m)は、「n」から「m」までのインデックスを削除します。
注釈
Oracleでは、ネストされたテーブルに対してこの操作を使用すると、テーブル内の要素がまばらであるために「未定義」になります。
警告
第2、第3バージョンはVarraysには適用されませんのでご注意ください。
Oracle¶
簡潔にするため、このサンプルでは要素数のみをチェックしていますが、各コレクションの内容を表示するように変更することもできます。
結果¶
DBMS に OUTPUT |
|---|
0 |
0 |
3 |
2 |
0 |
3 |
1 |
Snowflake¶
Snowflakeは既存の ARRAY からの削除をサポートしていません。このため、唯一の回避策は、 DELETE の元のパラメーターに応じて新しい ARRAY を再構築することです。
注釈
要素の更新のための機能を実装するために UDF が追加されたことに注意してください。
この UDF は、後の改訂で追加される予定です。
結果¶
DBMS に OUTPUT |
|---|
0 |
0 |
3 |
2 |
0 |
3 |
1 |
EXTEND¶
このメソッドは、ネストされたテーブルまたはVarrayに新しい要素を追加するために使用します。バリアントは3種類あります。
.EXTEND はnull要素を挿入します。
.EXTEND(n)は「n」個のnull要素を挿入します。
.EXTEND(n, i)は、「i」に要素のコピーを「n」個挿入します。
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
5 |
5 |
5 |
Snowflake¶
注釈
要素の更新のための機能を実装するために UDF が追加されたことに注意してください。
この UDF は、後の改訂で追加される予定です。
結果¶
DBMS に OUTPUT |
|---|
5 |
5 |
5 |
TRIM¶
このメソッドは、ネストされたテーブルやVarrayから最後の要素を削除するために使用します。バリアントには2種類あります。
.TRIM は最後の要素を削除します。
.TRIM(n)は最後の「n」個の要素を削除します。
注釈
この機能は、 ARRAY_SLICE を使用して実装できます。
Oracle¶
結果¶
LIMIT¶
このメソッドはVarrayの上限を返します。
危険
このメソッドはSnowflakeではサポートされていません。
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
5 |
6 |
PRIOR/NEXT¶
このメソッドは、インデックスを指定すると、その前後のインデックスを返します。先行/後続がない場合はnullを返します。コレクションをたどるときによく使われます。
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
-- 空白部分は結果が空であるためです |
1 |
3 |
abc |
jkl |
jkl |
既知の問題¶
1.LimitメソッドはSnowflakeではサポートされていません¶
Snowflakeは、スペースが制限されたvarrayをサポートしていません。そのため、このメソッドはサポートされていません。
関連 EWIs¶
関連する EWIs なし。
ネストされたテーブル配列型定義¶
これは、Oracleのネストされたテーブル配列宣言をSnowflakeに変換するための変換リファレンスです。
警告
このセクションは進行中であり、情報は将来変更される可能性があります。
注釈
このセクションは、ネストされたテーブル配列の PL/SQL バージョンに関するものです。スタンドアロンバージョンについては、[ネストされたテーブル型の定義](../sql-translation-reference/create_type.md#nested-table-type-definition)を参照してください。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
データベースでは、ネストされたテーブルは、不特定多数の行を順不同に格納する列型です。
データベースから PL/SQL ネストされたテーブル変数にネストされたテーブル値を取り出すと、 PL/SQL は1から始まる連続したインデックスを行に与えます。これらのインデックスを使用すると、ネストされたテーブル変数の個々の行にアクセスできます。構文は
variable_name(index)です。データベースからネストされたテーブルを格納したり取得したりする際に、ネストされたテーブルのインデックスや行の順序が安定しない可能性があります。
翻訳のために、型定義は ARRAY 半構造化データ型 に置き換えられ、その使用はあらゆる操作にわたって適宜変更されます。ネストされたテーブルとVarraysの翻訳が同じであることに注意してください。
To define a Nested Table Array type, the syntax is as follows:
この型の変数を宣言するには
サンプルソースパターン¶
ネストされたテーブル配列の定義¶
これは、異なるネストされたテーブル配列を作成する方法と、変数の定義を移行する方法を示しています。
Oracle¶
Snowflake¶
ネストされたテーブルの繰り返し¶
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Snowflake¶
注釈
要素の更新のための機能を実装するために UDF が追加されたことに注意してください。
この UDF は、後の改訂で追加される予定です。
UDF¶
結果¶
DBMS に OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
既知の問題¶
1.現在、変換されていません¶
SnowConvert AI はこれらの要素の変換をサポートしていません。
2.インデックスの修正が必要です¶
Oracleのインデックスは1から始まりますが、Snowflakeでは0から始まります。
関連 EWIs¶
関連する EWIs なし。
記録型定義¶
これは、Oracleの記録宣言をSnowflakeに変換するための変換リファレンスです。
警告
このセクションは進行中であり、情報は将来変更される可能性があります。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
記録変数は、フィールドと呼ばれる内部コンポーネントが異なるデータ型を持つことができる複合変数です。記録変数の値とそのフィールドの値は変更可能です。
記録変数全体をその名前で参照します。
record.fieldという構文で記録フィールドを参照します。記録変数はこれらの方法で作成できます。
記録型を定義し、その型の変数を宣言します。
%ROWTYPEを使用して、データベーステーブルまたはビューの完全行または部分行を表す記録変数を宣言します。
%TYPEを使用して、以前に宣言された記録変数と同じ型の記録変数を宣言します。
翻訳のために、型定義は OBJECT 半構造化データ型 に置き換えられ、その使用はあらゆる操作にわたって適宜変更されます。
To define a Record type, the syntax is as follows:
この型の変数を宣言するには
サンプルソースパターン¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
記録の初期化と割り当て¶
このサンプルは、プロシージャの途中で再割り当てされる記録変数を使用して、2つの新しい行を挿入しようとしています。
Oracle¶
結果¶
COL1 |
COL2 |
|---|---|
1.5 |
1 |
2.5 |
2 |
Snowflake¶
再割り当てが、列が既に存在する場合に更新する OBJECT_INSERT で置き換えられ、 VALUES 句が SELECT で置き換えられていることに注意してください。
結果¶
COL1 |
COL2 |
|---|---|
1.5 |
1 |
2.5 |
2 |
%ROWTYPE Record and Values Record¶
操作は構造を定義するものであるため、これらの定義は OBJECT データ型に置き換えることができますが、記録を「そのまま」挿入することはサポートされていないため、記録の値を分解する必要があります。
Oracle¶
結果¶
COL1 |
COL2 |
COL3 |
|---|---|---|
1 |
"Hello" |
25-DEC-20 |
Snowflake¶
Please note finally how the OBJECT variable needs to be initialized to add the information to it.
結果¶
COL1 |
COL2 |
COL3 |
|---|---|---|
1 |
"Hello" |
25-DEC-20 |
記録へのデータ取得¶
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
1 |
Hello |
25-DEC-20 |
Snowflake¶
カーソル定義に OBJECT_CONSTRUCT が追加されていることに注意してください。これは OBJECT を抽出するためのもので、これを使用して FETCH ステートメントをシームレスに移行できます。
結果¶
DBMS に OUTPUT |
|---|
1 |
Hello |
25-DEC-20 |
SELECT INTO への記録変数の割り当て¶
この変換は、 SELECT 列を引数として記録を初期化する OBJECT୧_CONTRUCT 関数を利用することで行われます。
補助コードのサンプル¶
Oracle¶
Snowflake¶
Oracle¶
結果¶
COL1 |
COL2 |
|---|---|
SELECT 1 |
NAME 1 |
SELECT 2 |
NAME 2 |
SELECT 3 |
NAME 3 |
SELECT 4 |
NAME 4 |
Snowflake¶
結果¶
COL1 |
COL2 |
|---|---|
SELECT 1 |
NAME 1 |
SELECT 2 |
NAME 2 |
SELECT 3 |
NAME 3 |
SELECT 4 |
NAME 4 |
既知の問題¶
1.以下の機能は現在変換されていません。¶
記録へのデータ取得。
ネストされた記録(記録の中の記録)。
記録内のコレクション。
関連 EWIs¶
SSC-EWI-0036: データ型が別のデータ型に変換されました。
[SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0056):作成型はサポートされていません
[SSC-FDM-0006](../../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM.md#ssc-fdm-0006):数値型の列はSnowflakeでは同様の動作をしない場合があります。
[SSC-FDM-OR0042](../../../general/technical-documentation/issues-and-troubleshooting/functional-difference/oracleFDM.md#ssc-fdm-or0042):日付型をタイムスタンプに変換すると異なる動作をします。
SSC-FDM-OR0035: DBMS_OUTPUT.PUTLINE UDF 実装を確認します。
[SSC-PRF-0003](../../../general/technical-documentation/issues-and-troubleshooting/performance-review/generalPRF.md#ssc-prf-0003):ループ内のフェッチは複雑なパターンとみなされるため、Snowflakeのパフォーマンスが低下する可能性があります。
配列型定義¶
これは、OracleのVarray宣言をSnowflakeに変換するための変換リファレンスです。
警告
このセクションは進行中であり、情報は将来変更される可能性があります。
注釈
このセクションは、Varrayの PL/SQL バージョンに関するものです。スタンドアロンバージョンについては、[配列型定義](../sql-translation-reference/create_type.md#array-type-definition)を参照してください。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
varray(可変サイズ配列)は、要素数が0(空)から宣言された最大サイズまで変化する配列です。
varray変数の要素にアクセスするには、
variable_name(index)という構文を使います。インデックスの下限は1で、上限は現在の要素数です。要素の追加や削除によって上限は変わりますが、最大サイズを超えることはありません。データベースからvarrayを格納したり取り出したりするとき、そのインデックスと要素の順序は安定したままです。
翻訳のために、型定義は ARRAY 半構造化データ型 に置き換えられ、その使用はあらゆる操作にわたって適宜変更されます。ネストされたテーブルとVarraysの翻訳が同じであることに注意してください。
To define a varray type, the syntax is as follows:
この型の変数を宣言するには
サンプルソースパターン¶
Varray定義¶
これは、3つの異なる方法でvarrayを作成する方法と、これらの変数の定義を移行する方法を示しています。
Oracle¶
Snowflake¶
Varrayの反復¶
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Snowflake¶
注釈
要素の更新のための機能を実装するために UDF が追加されたことに注意してください。
この UDF は、後の改訂で追加される予定です。
UDF¶
結果¶
DBMS に OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
既知の問題¶
1.現在、変換されていません¶
SnowConvert AI はこれらの要素の変換をサポートしていません。
2.インデックスの修正が必要です¶
Oracleのインデックスは1から始まりますが、Snowflakeでは0から始まります。
3.配列密度はオリジナルと一致しない場合があります¶
ARRAY データ型はまばらになる可能性があるため、配列の追加や削除を行う際には注意が必要です。密度が気になる場合は、このような操作の後に ARRAY_୧COMPACT()を使用すると便利です。
関連 EWIs¶
[SSC-EWI-0058](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0058):機能は現在、Snowflakeスクリプトではサポートされていません。
[SSC-EWI-0062](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0062):カスタム型の使用法がバリアントに変更されました。
SSC-EWI-0073: 機能等価性レビュー保留中。
[SSC-EWI-OR0108](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0108):次の代入文は、Snowflakeスクリプトではサポートされていません。
SSC-FDM-OR0035: DBMS_OUTPUT.PUTLINE UDF 実装を確認します。
コレクション一括操作¶
これは、Oracleコレクション一括操作をSnowflakeに変換するための変換リファレンスです。
警告
このセクションは進行中であり、情報は将来変更される可能性があります
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
一括 SQL の機能である
BULKCOLLECT句は、 SQL から PL/SQL までの結果を、一度に1つではなくバッチで返します。
BULKCOLLECT句は、次の場合に出現します。
SELECTINTOステートメント
FETCHステートメント次の
RETURNINGINTO句:
DELETEステートメント
INSERTステートメント
UPDATEステートメント
EXECUTEIMMEDIATEステートメント
BULKCOLLECT句を使用すると、前述の各ステートメントは、1回の操作で結果セット全体を取得し、1つまたは複数のコレクション変数に格納します(これは、ループステートメントを使用して一度に1つの結果行を取得するよりも効率的です)。
(Oracle PL/SQL 言語リファレンス BULK COLLECT CLAUSE)
このセクションでは、Bulk句を使用した SELECTs および FETCH カーソルの回避策をいくつか示します。
サンプルソースパターン¶
ソーステーブル¶
Oracle¶
Snowflake¶
テーブルからのBulk Collect¶
Oracle¶
結果¶
DBMS に OUTPUT |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
Snowflake¶
危険
Bulk Collect句を使用した EXECUTE IMMEDIATE には回避策がありません。
注釈
なお、 FETCH カーソルはほぼそのまま使用できますが、パフォーマンスの問題から、可能な限り SELECT ステートメントに変更することをお勧めします。
結果¶
DBMS に OUTPUT |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
-- EXECUTE IMMEDIATE NOT EXECUTED、サポートされていません |
SELECT INTO ステートメントケース¶
この場合、翻訳仕様は RESULTSETs を使用します。WITH、 SELECT、 BULK COLLECT INTO ステートメントのドキュメントはこちらをご覧ください。
既知の問題¶
1.FETCH カーソルの回避策における重いパフォーマンスの問題¶
Fetchカーソルの回避策は、仮テーブルのために重いパフォーマンスが要求されます。SELECT ステートメントに手動で移行することをお勧めします
2.Execute immediateステートメントは変換されません¶
これらは SnowConvert AI ではサポートされていませんが、手動で SELECT ステートメントに変更できます。
関連 EWIs¶
[SSC-EWI-0058](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0058):機能は現在、Snowflakeスクリプトではサポートされていません。
[SSC-EWI-0062](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0062):カスタム型の使用法がバリアントに変更されました。
SSC-EWI-0073: 機能等価性レビュー保留中
[SSC-EWI-OR0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0036):型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
[SSC-EWI-OR0108](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0108):次の代入文は、Snowflakeスクリプトではサポートされていません。
SSC-FDM-OR0035: DBMS_OUTPUT.PUTLINE UDF 実装を確認します。
[SSC-PRF-0001](../../../general/technical-documentation/issues-and-troubleshooting/performance-review/generalPRF.md#ssc-prf-0001):このステートメントには、カーソルフェッチ一括操作の使用法があります。
[SSC-EWI-0030](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0030):以下のステートメントには、動的 SQL を使用しています
WITH、 SELECT、および BULK COLLECT INTO ステートメント¶
危険
このセクションは翻訳仕様です。情報は将来変更される可能性があります。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
このセクションは、 BULK COLLECT INTO ステートメントを使用する SELECT ステートメントに続く WITH ステートメントの翻訳仕様です。詳細情報については、以下のドキュメントをご覧ください。
[SnowConvert AI 一括収集変換](#bulk-collect-from-a-table)。
サンプルソースパターン¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
以下の例では、以下のクエリを使用しています。
Oracle¶
Snowflake¶
1.プロシージャ内部の単純なケース¶
危険
これは結果セットデータ型を使用するアプローチです。ユーザー定義型の見直しが必要です。RESULTSETs の詳細情報については、以下の Snowflakeドキュメント を参照してください。
以下の例ではユーザー定義型を使用し、テーブルとして間接的に宣言しています。この場合の翻訳では、Snowflakeのデータ型として RESULTSET を実装します。結果セットは変数に格納され、 TABLE() 関数でラップして返す必要があります。
Oracle¶
結果¶
注釈
クエリは結果を返しませんが、予想される収集情報は、例で使用した IT 給与情報です。
IT_Salary |
|---|
75000 |
80000 |
危険
RESULTSETs の制限の一つは、テーブルとして使えないことです。例: select * from my_result_set; (これはエラーです。詳細は以下の ドキュメント をご参照ください)。
Snowflake¶
結果¶
SALARY |
|---|
77500 |
80000 |
2.反復の単純なケース: FOR LOOP ステートメント¶
次のケースは、 FOR...LOOP との反復のための翻訳を定義することです。この場合、ユーザー定義型は暗黙のうちにテーブルであり、カーソルを使用して反復することが可能です。詳しくは以下のドキュメントをご覧ください。
カーソルのテーブルを返す方法についてのSnowflakeドキュメント。
この場合、反復のためのカーソルを作成する必要があります。以下の カーソル割り当て構文 のドキュメントを参照してください。
Oracle¶
結果¶
Snowflake¶
結果¶
SIMPLE_PROCEDURE |
|---|
IT 部門の平均給与:77500 |
既知の問題¶
1.結果セットの制限。¶
RESULTSET データ型の使用には制限があります。詳しくは、以下の Snowflakeドキュメント をご覧ください。マーク可能な制限は以下の通りです。
型 RESULTSET の列を宣言する。
型 RESULTSET のパラメーターを宣言する。
ストアドプロシージャの戻り型を RESULTSET として宣言する。
2.Bulk Collect句を含む実行ステートメントはサポートされていません。¶
以下の ドキュメントを確認してください。
関連 EWIs¶
[SSC-EWI-0058](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0058):機能は現在、Snowflakeスクリプトではサポートされていません。
[SSC-EWI-0062](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md#ssc-ewi-0062):カスタム型の使用法がバリアントに変更されました。
SSC-EWI-0073: 機能等価性レビュー保留中
[SSC-EWI-OR0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0036):型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
[SSC-EWI-OR0072](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0072):手続きメンバーはサポートされていません
[SSC-EWI-OR0104](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0104):使用できないコレクション変数です。
[SSC-FDM-0006](../../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM.md#ssc-fdm-0006):数値型の列はSnowflakeでは同様の動作をしない場合があります。
SSC-FDM-OR0035: DBMS_OUTPUT.PUTLINE UDF 実装を確認します。