動的SQLとは何ですか?
動的SQLは、実行時にステートメントを生成および実行するためのプログラミング手法です。 主に、要件に基づいて実行時にSQLステートメントを作成および実行する汎用で柔軟なプログラムを記述するために使用されます。,
このチュートリアルでは、次のことを学びます-
- 動的SQLの書き方
- Nds(Native Dynamic SQL)-即時実行
- 動的SQLのDBMS_SQL
動的SQLの書き方
PL/SQLは、動的SQLの書き方
- NDS–ネイティブ動的SQL
- DBMS_SQL
nds(ネイティブ動的sql)-即時実行
ネイティブ動的Sqlは、動的sqlを記述する簡単な方法です。 実行時にSQLを作成および実行するには、’EXECUTE IMMEDIATE’コマンドを使用します。, しかし、この方法を使用するには、実行時に使用されるデータ型と変数の数を前に知る必要があります。 また、DBMS_SQLと比較すると、パフォーマンスが向上し、複雑さが少なくなります。
構文
EXECUTE IMMEDIATE(<SQL>)
- 上記の構文は、即時実行コマンドを示しています。
- 句INTOはオプションであり、動的SQLに値をフェッチするselect文が含まれている場合にのみ使用されます。 変数タイプは、selectステートメントの変数タイプと一致する必要があります。,
- 句USINGはオプションであり、動的SQLにバインド変数が含まれている場合にのみ使用されます。 例1:この例では、nds文を使用してemp_no’1001’のemp表からデータをフェッチします。
Output
Employee Name : XXX Employee Number: 1001 Salary: 15000 Manager ED: 1000
コード説明:
DBMS_SQL For Dynamic SQL
PL/SQL動的SQLを操作できるようにするDBMS_SQLパッケージを提供します。 動的SQLを作成および実行するプロセスには、次のプロセスが含まれます。,
- カーソルを開く:動的SQLはカーソルと同じ方法で実行されます。 したがって、SQL文を実行するには、カーソルを開く必要があります。
- SQLを解析する:次のステップは、動的SQLを解析することです。 このプロセスは、構文をチェックし、クエリを実行する準備が整います。
- バインド変数値:次のステップは、バインド変数の値がある場合に割り当てることです。
- 列を定義する:次のステップは、selectステートメント内の相対位置を使用して列を定義することです。
- 実行:次のステップは、解析されたクエリを実行することです。,
- 値を取得する:次のステップは、実行された値を取得することです。
- カーソルを閉じる:結果がフェッチされたら、カーソルを閉じる必要があります。例1:この例では、DBMS_SQL文を使用してemp_no’1001’のemp表からデータをフェッチします。
出力
Employee Name:XXX Employee Number:1001 Salary:15000 Manager ID:1000
コードの説明:
- コードライン1-9:変数宣言。,
- コード行10:SQLステートメントのフレーミング。
- コード行11:DBMS_SQLを使用してカーソルを開きます。OPEN_CURSOR。 これは、開かれたカーソルidを返します。
- コード行12:カーソルが開かれた後、SQLが解析されます。
- コード行13:バインド変数’1001’が’:empno’の代わりにカーソルidに割り当てられています。
- コードライン14-17:SQLステートメント内の相対位置に基づいて列名を定義します。 私たちの場合、相対的な位置は(1)emp_name、(2)emp_no(3)salary(4)managerです。 したがって、この位置に基づいて、ターゲット変数を定義します。,
- コード行18:DBMS_SQLを使用してクエリを実行します。実行しろ 処理されたレコードの数を返します。
- コードライン19-33:ループを使用してレコードをフェッチし、同じものを表示します。
- コード行20:DBMS_SQL.FETCH_ROWSは、処理された行から一つのレコードを取得します。 これを繰り返し呼び出して、すべての行を取得できます。 行をフェッチできない場合は、0を返し、ループを終了します。
概要
このセクションでは、動的SQLと動的SQLを実行する方法について説明しました。, また、両方の方法で動的SQLを実行する際のさまざまなステップも見てきました。 また、実行時に実行を実行するために、同じシナリオがNDSとDBMS_SQLの両方の方法で処理される例も見てきました。