2016-12-19 39 views
0

Oracleカーソルのレコード数(プロシージャの出力パラメータ)を知る必要があります。オラクル・カーソルのレコード数をカウントする

カーソルはOracleパッケージの本体で宣言され、タイプはREF CURSORです。

手順2(同じパッケージ)の中で、手順1を呼び出して出力カーソルを取得します。

この出力カーソルをループしてレコードの数を数える必要があります。私はたくさんの例をテストしましたが、どの例でも動作します。

おかげで、

+1

関連するコードを表示してください。 「select count(*)...」の何が問題なの? – OldProgrammer

+4

カーソルのレコード数をカウントするには、このカーソルからすべてのレコードを読み取る(フェッチする)必要があります。カーソルはjavaのファイル(ストリーム)に似ています。このファイルの行数を知るためには、ファイル全体を読む必要があります。 – krokodilko

答えて

3

それを反復処理することなく、カーソルのカウントを取得することはできません。カーソルは、データ自体ではなくデータへのポインタのようなものです。だから、あなたがカウントする必要がある場合はcursor%notfoundまでループを行う必要があります。そこcursor%ROWCOUNTのようなものがあるが、documentationは言う:

カーソルまたはカーソル変数の名前に追加することができますカーソル属性。カーソルがオープンされると、%ROWCOUNTはゼロになります。最初のフェッチの前に、cursor_name%ROWCOUNTは0を返します。その後、フェッチされた行の数を返します。最新のフェッチが行を戻した場合は、その数が増分されます。

のでカウントがカーソルの上にselect count(*) from --the same condition as in cursorまたはループを実行する(すべてのデータをフェッチ)し、その後%rowcountを確認するか、単にすべてのカーソル・レコードのための変数をインクリメントされるか、取得する唯一の方法は、しかし、おそらく最速の方法は、カーソルからすべてのレコードをフェッチ一括で%rowcountを使用してください。

関連する問題