Oracleカーソルのレコード数(プロシージャの出力パラメータ)を知る必要があります。オラクル・カーソルのレコード数をカウントする
カーソルはOracleパッケージの本体で宣言され、タイプはREF CURSORです。
手順2(同じパッケージ)の中で、手順1を呼び出して出力カーソルを取得します。
この出力カーソルをループしてレコードの数を数える必要があります。私はたくさんの例をテストしましたが、どの例でも動作します。
おかげで、
Oracleカーソルのレコード数(プロシージャの出力パラメータ)を知る必要があります。オラクル・カーソルのレコード数をカウントする
カーソルはOracleパッケージの本体で宣言され、タイプはREF CURSORです。
手順2(同じパッケージ)の中で、手順1を呼び出して出力カーソルを取得します。
この出力カーソルをループしてレコードの数を数える必要があります。私はたくさんの例をテストしましたが、どの例でも動作します。
おかげで、
それを反復処理することなく、カーソルのカウントを取得することはできません。カーソルは、データ自体ではなくデータへのポインタのようなものです。だから、あなたがカウントする必要がある場合はcursor%notfound
までループを行う必要があります。そこcursor%ROWCOUNT
のようなものがあるが、documentationは言う:
カーソルまたはカーソル変数の名前に追加することができますカーソル属性。カーソルがオープンされると、%ROWCOUNTはゼロになります。最初のフェッチの前に、cursor_name%ROWCOUNTは0を返します。その後、フェッチされた行の数を返します。最新のフェッチが行を戻した場合は、その数が増分されます。
のでカウントがカーソルの上にselect count(*) from --the same condition as in cursor
またはループを実行する(すべてのデータをフェッチ)し、その後%rowcount
を確認するか、単にすべてのカーソル・レコードのための変数をインクリメントされるか、取得する唯一の方法は、しかし、おそらく最速の方法は、カーソルからすべてのレコードをフェッチ一括で%rowcount
を使用してください。
関連するコードを表示してください。 「select count(*)...」の何が問題なの? – OldProgrammer
カーソルのレコード数をカウントするには、このカーソルからすべてのレコードを読み取る(フェッチする)必要があります。カーソルはjavaのファイル(ストリーム)に似ています。このファイルの行数を知るためには、ファイル全体を読む必要があります。 – krokodilko