PL / SQL-カーソル
この章では、PL / SQLのカーソルについて説明します。 Oracleは、SQL文を処理するために、コンテキスト領域と呼ばれるメモリ領域を作成します。この領域には、文の処理に必要なすべての情報が含まれています。たとえば、処理された行数などです。
カーソルは、このコンテキスト領域へのポインタです。 PL / SQLは、カーソルを介してコンテキスト領域を制御します。カーソルは、SQLステートメントによって返される行(1つ以上)を保持します。カーソルが保持する行のセットは、アクティブセットと呼ばれます。
カーソルに名前を付けて、プログラムで参照し、SQLステートメントによって返される行をフェッチして処理できるようにすることができます。一度に。カーソルには2つのタイプがあります-
- 暗黙カーソル
- 明示カーソル
暗黙カーソル
暗黙カーソルSQLステートメントが実行されるたびに、ステートメントに明示的なカーソルがない場合、Oracleによって自動的に作成されます。プログラマーは、暗黙カーソルとその中の情報を制御できません。
DMLステートメント(INSERT、UPDATE、およびDELETE)が発行されるたびに、暗黙カーソルがこのステートメントに関連付けられます。 INSERT操作の場合、カーソルは挿入する必要のあるデータを保持します。 UPDATEおよびDELETE操作の場合、カーソルは影響を受ける行を識別します。
PL / SQLでは、最新の暗黙カーソルをSQLカーソルとして参照できます。SQLカーソルには常に%FOUNDなどの属性があります。 、%ISOPEN、%NOTFOUND、および%ROWCOUNT。 SQLカーソルには、FORALLステートメントで使用するために設計された追加の属性%BULK_ROWCOUNTおよび%BULK_EXCEPTIONSがあります。次の表に、最もよく使用される属性の説明を示します-
S.No | 属性&説明 |
---|---|
1 |
%FOUND INSERT、UPDATE、またはDELETEステートメントが1つ以上の行に影響を与えた場合、またはSELECT INTOステートメントが1つ以上の行を返した場合、TRUEを返します。それ以外の場合は、FALSEを返します。 |
2 |
%NOTFOUND %FOUNDの論理的な反対。 INSERT、UPDATE、またはDELETEステートメントが行に影響を与えなかった場合、またはSELECT INTOステートメントが行を返さなかった場合は、TRUEを返します。それ以外の場合は、FALSEを返します。 |
3 |
%ISOPEN Oracleは関連するSQLステートメントの実行後にSQLカーソルを自動的に閉じるため、暗黙カーソルに対しては常にFALSEを返します。 |
4 |
%ROWCOUNT INSERT、UPDATE、またはDELETEステートメントの影響を受ける行数、またはSELECTINTOステートメントによって返される行数を返します。 |
以下の例に示すように、SQLカーソル属性はsql%attribute_nameとしてアクセスされます。
例
前の章で作成して使用したCUSTOMERSテーブルを使用します。
次のプログラムは、テーブルを更新し、各顧客の給与を500増やし、SQL%を使用します。影響を受ける行数を決定するROWCOUNT属性-
上記のコードをSQLプロンプトで実行すると、次の結果が生成されます-
6 customers selected PL/SQL procedure successfully completed.
Customersテーブルのレコードを確認すると、行が更新されていることがわかります-
明示カーソル
明示カーソルは、より詳細に制御するためのプログラマー定義のカーソルです。コンテキスト領域。 PL / SQLブロックの宣言セクションで明示カーソルを定義する必要があります。複数の行を返すSELECTステートメントで作成されます。
明示カーソルを作成するための構文は次のとおりです。-
CURSOR cursor_name IS select_statement;
動作中明示カーソルを使用する場合は、次の手順を実行します-
- メモリを初期化するためのカーソルの宣言
- メモリを割り当てるためのカーソルを開く
- カーソルの取得データを取得する場合
- カーソルを閉じて割り当てられたメモリを解放する
カーソルを宣言する
カーソルを宣言すると、カーソルに名前と関連するSELECTステートメント。例-
CURSOR c_customers IS SELECT id, name, address FROM customers;
カーソルを開く
カーソルを開くと、カーソルにメモリが割り当てられ、返された行をフェッチできるようになります。その中にSQLステートメントによって。たとえば、上記で定義したカーソルを次のように開きます-
OPEN c_customers;
カーソルの取得
カーソルの取得には、次の1行へのアクセスが含まれます。時間。たとえば、上記で開いたカーソルから次のように行をフェッチします-
FETCH c_customers INTO c_id, c_name, c_addr;
カーソルを閉じる
カーソルを閉じるとは解放することを意味します割り当てられたメモリ。たとえば、上で開いたカーソルを次のように閉じます-
CLOSE c_customers;
例
以下は、概念を説明するための完全な例です。 明示カーソルの数& minua;
上記のコードをSQLプロンプトで実行すると、次の結果が生成されます-
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.