Oracle では、カーソルは、キーワード CURSOR を使用して、Oracle によってクエリされるデータ セットのセットを定義するメカニズムです。クエリされたデータ セットはメモリに格納でき、カーソルはデータの 1 つを指します。データ セットをループするという目的を達成するために、ループ カーソルを介して記録します。
このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。
Oracle では、カーソルは SELECT ステートメントに名前を割り当て、その SQL ステートメント内の情報を処理できるメカニズムです。
Oracle カーソルは、キーワード CURSOR を通じて Oracle によって照会されるデータ セットのセットを定義します。配列と同様に、照会されたデータ セットはメモリに格納され、カーソルはレコードの 1 つを指し、カーソルがループ データ セットをループする目的を達成します。
カーソルの機能は何ですか?
①結果セット内の特定の行の位置を指定します。
②現在の結果セットの位置に基づいて、1 行または連続する複数の行を取得します。
③ 結果セットの現在位置にある行のデータを変更します。
④ 他のユーザーによるデータ変更に対してさまざまな機密レベルを定義します。
⑤データベースにはプログラムからアクセスできます。
Oracle カーソルの種類?
1. 静的カーソル: 結果セットが確認されている (静的に定義されている) カーソル。暗黙的カーソルと明示的カーソルに分けられる
暗黙的カーソル: すべての DML ステートメントは暗黙的カーソルであり、SQL ステートメントの情報は暗黙的カーソル属性を通じて取得できます。
カーソルの表示: ユーザーは、宣言されたカーソル、つまり指定された結果セットを表示します。クエリが複数行の結果を返す場合は、明示的なカーソルが必要です。
2. REF カーソル: 結果セットを動的に関連付ける一時オブジェクト。
Oracle カーソルのステータスとカーソル属性の使用方法は何ですか?
①カーソルの状態を属性で表現します。
%Found: Fetch ステートメント (レコードの取得) の実行ステータスが True または False です。
%NotFound: 最後のレコードが True として抽出されるか False として抽出されるか。
%ISOpen: カーソルが開いているかどうか。True または False。
%RowCount: カーソルによって現在抽出されている行の数。
②カーソルのプロパティを利用します。
例:
1 2 3 4 5 6 7 8 9 |
|
ディスプレイ カーソルを使用するにはどうすればよいですか?ループカーソルを反復するにはどうすればよいですか?
1. 表示カーソルを使用します
カーソルを宣言します: 記憶領域を分割します。この時点では Select ステートメントは実行されないことに注意してください。 。
1 |
|
カーソルを開く: Select ステートメントを実行し、結果セットを取得してカーソルに格納します。このとき、カーソルは先頭を指します。最初のレコードではなく、結果セットです。
1 |
|
レコードの取得: カーソルを移動してレコードを取得します
1 |
|
カーソル: カーソルはバッファー プールに配置され、リソースは完全には解放されません。再開可能です。
1 |
|
2. ループ カーソルの移動
ループ カーソルの場合
ループ カーソルは次のとおりです。暗黙的にオープン カーソルは自動的にスクロールしてレコードを取得し、レコードを保存するための一時レコード タイプ変数を自動的に作成します。処理後、カーソルは自動的に閉じられます。
1 2 3 4 |
|
ループ カーソル
1 2 3 4 5 6 |
|
例 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
例 2: ループを使用してカーソルを移動します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
例 3: For ループを使用してカーソルを移動します。
1 2 3 4 5 6 7 8 9 10 |
|
表示されたカーソル内のレコードを更新および削除するにはどうすればよいですか?
①UPDATE または DELETE ステートメントの WHERE CURRENT OF 部分文字列は、UPDATE または DELETE 操作を実行するテーブルから取得された最新のデータを具体的に処理します。
このメソッドを使用するには、カーソルを宣言するときに FOR UPDATE 部分文字列を使用する必要があります。ダイアログで FOR UPDATE 部分文字列を使用してカーソルを開くと、
戻りセット内のすべてのデータ行が行レベル (ROW-LEVEL) 排他ロックにある場合、他のオブジェクトはこれらのデータ行のクエリのみを行うことができ、
は UPDATE、DELETE、または SELECT...FOR UPDATE 操作を実行できません。
複数テーブルのクエリでは、OF 句を使用して特定のテーブルをロックします。OF 句が無視されると、すべてのテーブルで選択されたデータ行がロックされます。
これらのデータ行が他のセッションによってロックされている場合、通常の状況では、ORACLE はデータ行のロックが解除されるまで待機します。
② 更新または削除を使用します:
⑴ 表示カーソルを更新または削除することを宣言します:
1 2 |
|
⑵ 表示カーソルを使用して現在のレコードを更新または削除します:
1 2 |
|
例 1: 表示カーソル レコードを更新します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
例 2: 表示カーソル レコードを削除します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
パラメータ付き表示カーソルとは何ですか?
1. プロシージャや関数と同様に、パラメータをカーソルに渡してクエリで使用できます。
パラメータはデータ型のみを定義し、サイズは定義しません (Oracle のすべての仮パラメータはデータ型のみを定義し、サイズは定義しません)。
与过程不同的是,游标只能接受传递的值,而不能返回值。
可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值。
游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠。
2、使用带参数的显示游标
声明带参数的显示游标:
1 |
|
参数形式:
1,参数名 数据类型
2,参数名 数据类型 DEFAULT 默认值
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
推荐教程:《Oracle教程》
以上がオラクルカーソルとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。