oracle-カーソルの概要

この記事では、それが問題で、以下の実施例を説明があるでしょうしません理解していない、あなたは、単に見下ろすことができる非常に関連したカーソルの定義の先頭のいくつかをご紹介します。

 

カーソルは何ですか

PL / SQLブロック内の選択更新、削除、挿入文、Oracleコンテキストを行う場合には、すなわちA、バッファ、メモリに割り当てられています。カーソルは、データの各行は、それが別のアプリケーション・プロセスの方法のためのマルチラインデータクエリ結果セットの種類を提供し、領域へのポインタ、または指定されたワークスペース、または構造化データ・タイプです。

カーソルのシナリオ

私たちはしばしば、オラクルそれまで、シーンチェンジを、以下の操作でJavaを持っているリストに、データベースからのデータのいくつかをチェックアウトし、バックグラウンドのサイクルによって、このリストは続き、その使用のための値のリストから?今回は、それを理解することは容易ではない、面倒であり、好奇心の小さなパートナーはBaiduの検索を所有することができ、定義上のカーソルのカーソルを使用する必要がある私は理解して、私の下のリストにOracleでカーソルに似ていますが、我々が通過していること、ここで言いますforループでのOracleは、カーソルからの操作値に、カーソルは、カーソルのアプリケーションであるか、またはサイクルによって操作されます。

カーソルの分類

カーソルは、明示的および暗黙カーソルのカーソルに分けることができます。

明示カーソル

1.カーソル宣言は:カーソルの名前が含まれ、select文は、カーソルの結果セットを提供します。カーソル...です...

2.カーソル:カーソルが宣言された後、使用に開いていなければなりません。実際には、select文の実装を定義し、その後は、カーソルはクエリ結果の最初の部分で停止し、クエリ結果は、メモリを追加実行し、注意が最初の行ではありません。オープン...

3.読むカーソル:カーソルを開くとき、カーソルのデータを読み取ることができるが、カーソルが変数に格納されたデータの結果セット内の行ごとに読み出されます。フェッチ...へ

4.カーソルのクローズ:すべての結果セットが取り出されたときに、カーソルがクローズされなければならない、とカーソルに関連付けられたリソースを解放することができます。近くに...

暗黙カーソル

SQL文の実装では、Oracleが自動的に暗黙のカーソルを作成します。カーソルは、ステートメント・ハンドル、作業領域のメモリです。

カーソルのプロパティ

、%が発見%のNOTFOUND、%の行数、4つの属性ISOPEN%を有する、明示的または暗黙的なカーソルのカーソルかどうか、状態情報は、カーソルのSQL文の実行結果を学習し、カーソルを記述する4つの属性によってもよいですDML文の実装に関連する業務。Cursorプロパティは、PLSQL、フロー制御ステートメント内でのみ使用することができ、SQL文で使用することはできません。注:カーソル目に見えない属性を使用する場合は、プロパティの前に暗黙のデフォルトのカーソル名-SQLを追加する必要があります。

1.%が見つかりました:ブール型プロパティを、(カーソルを見つけるするかどうか)のSQL文は、データの少なくとも一つの行に影響を与えるようにすると、そのプロパティがtrue、そうでない場合はfalse

2.%はNOTFOUND:ブール属性(見つからない場合は、カーソル)機能や属性%が反対を発見しました。

3.%の行数:数値属性(カーソル行)は、SQLの文によって影響を受けた行数を返します。これは、カーソルをオフ抽出された行の数として理解することができます。

4.%ISOPEN:カーソルがクローズされた場合、カーソルは、すでに偽開いている場合、ブール属性は、(カーソルが開いているかどうか)がtrueを返します。暗黙カーソルは、その開放状態を確認していない、オープンとクローズカーソル暗黙カーソルは常に真であるためではありません。

5.パラメトリックカーソル:カーソル定義には、パラメータをもたらすことができます

カーソル変数

述べカーソル上記静的で公知のSQLステートメントに関連付けられているが、異なるステートメントに関連付けられた実行時にカーソル変数は、クエリ結果セットの複数の行を処理するために使用される動的カーソル変数であります。カーソル変数は、特異的な結合クエリは異なるが、カーソルを開き、クエリに応じて決定することができます。したがって、カーソル変数は複数のクエリに対応することができます。カーソル変数を使用する前に、それは実行時にストレージ容量を割り当てなければならない、と宣言しなければなりません。

カーソル変数を宣言します。1.:タイプ<変数名>を参照カーソル・リターン<戻り値の型>であります 

2.カーソル変数:オープン<カーソル変数>のための<select文>

3.クローズカーソル変数:静的カーソルのクローズなどの

 

カーソルパートナーへの新しいいくつかは、まだ私たちは右カーソルが何であるかの深い理解に例を書いてみましょう、その後、理解できないためにそれを言って、それが可能です。

 

次の例は、私が書いたOracleのストアドプロシージャについて説明し、部分的に缶を見に慣れていないストアドプロシージャのストアドプロシージャのカーソルで使用され、その後、学ぶために戻ってきます。

まず、我々は、データベース内のいくつかのデータを追加すること自由に感じ、テスト、テーブル名T_USERとしてテーブルを作成する必要があります。

この例で見てみましょう。

循環へのフェッチカーソル

機能:削除ID、名前、年齢t_userデータテーブルからは、コンソールに出力されます。

1  作成 または 交換 手順 TEST1 ASを- TEST1ことなく、プロシージャ名、パラメータが格納される定義
2    カーソル test1_cursor IS  SELECT ID、名前、年齢から T_USER; - 明示カーソル名はtest1_cursorで宣言する
。3    v_id t_user.id タイプ。- テーブルID t_user型で変数名v_idタイプの定義
4。    v_name t_user.name 入力;
 5。    v_age t_user.age 型;
 6。 始める
7。   オープン test1_cursorと、- オープン・カーソルを
8      ループ
9        FETCH test1_cursor INTOは、v_id v_name、v_ageを; - 背面上の3つの変数のうちのカーソルからフェッチ
10        出口  test1_cursor %の NOTFOUND; - データなしカーソル出口11        DBMS_OUTPUT.PUT_LINE(' ID = ' || v_id || ' 名前= ' || v_name || ' 年齢= " || v_age); - 出力文3つの出力値12は、エンドループ;
 13です閉じる test1_cursor; - 閉じる14 エンド TEST1。

          
 

結果は次のとおりです。

ループのカーソル

1  作成 または 交換 手順 TEST2 ASを- プロシージャ名が格納されている定義TEST2ないパラメータ
2    カーソル test2_cursor IS  SELECT ID、名前、年齢から T_USER; - 明示カーソル名はtest2_cursorで宣言
3。 開始
4。   ため test1_cur におけるtest2_cursorループ 
 。5        DBMS_OUTPUT.PUT_LINE(' ID = ' || test1_cur.id || ' 名前= ' || test1_cur.name || ' 年齢= ' ||test1_cur.age); - 出力文3つの出力値
6。   エンドループ;
 7。 エンド TEST2。

forループのメリット

forループ1.カーソルが開いているか閉じているかに焦点を当てる必要はありません。

forループ2.自動的にデータレコード変数を取得します。

ループの3があること、書き込み終了条件への必要が満たされていない、撤退したときに心配する必要はありません。完全なトラバーサルが終了します。

 

whileループは確認することができます興味のあるBaiduは、もあります。

 

 

 

 

 

 

 

継続的に更新!

おすすめ

転載: www.cnblogs.com/flyinghome/p/12155514.html