カーソルに取り出された行数の判別

cursor_rowCount スカラー関数を使用すると、カーソルに関連した行の数を効率的に判別することができます。 この関数はカーソル変数をパラメーターとして取り、カーソルのオープン時から現在までに取り出された行数を示す整数値を出力として戻します。

始める前に

cursor_rowCount 関数を使用する前に、以下の前提条件が満たされる必要があります。
  • カーソル・データ・タイプが作成されている必要があります。
  • カーソル・データ・タイプのカーソル変数が宣言されている必要があります。
  • カーソルを参照する OPEN ステートメントが実行済みでなければなりません。

このタスクについて

SQL PL コンテキストで cursor_rowCount 関数を使ってこのタスクを実行することができます。 プロシージャー・ロジックの中で、あるカーソルに既に取り出された行数を示すカウント、または取り出された行数の合計カウントにアクセスする必要があるような場合に、これを実行します。 cursor_rowCount 関数を使用すると、取り出し済み行カウントに簡単にアクセスできます。 この方法を使用しない場合、変数を宣言して SET ステートメントを繰り返し実行することにより、プロシージャー・ロジックのループの中でカウントを維持する必要があるでしょう。

制約事項

cursor_rowCount 関数は SQL PL コンテキストでのみ使用可能です。

手順

  1. cursor_rowCount スカラー関数を参照する SQL ステートメントを定式化します。
    以下の例の SET ステートメントは、cursor_rowCount スカラー関数の出力を rows_fetched というローカル変数に割り当てます。
    SET rows_fetched = CURSOR_ROWCOUNT(curEmp)
  2. cursor_rowCount 関数参照を含んでいる SQL ステートメントを、サポートされる SQL PL コンテキストに組み込みます。 例えば CREATE PROCEDURE ステートメントや CREATE FUNCTION ステートメントの中に入れて、ステートメントをコンパイルします。

タスクの結果

ステートメントが正常にコンパイルされます。

以下の例は、cursor_rowCount 関数の参照を含む SQL プロシージャーです。

connect to sample %

set serveroutput on %

create or replace procedure rowcount_test()
language sql
begin
  declare rows_fetched bigint;
  declare Designers cursor;
  declare first anchor to employee.firstnme;
  declare last anchor to employee.lastname;
 
  set Designers = cursor for select firstnme, lastname
    from employee where job = 'DESIGNER' order by empno asc;

  open Designers;

  fetch Designers into first, last;
  call dbms_output.put_line(last || ', ' || first);
  fetch Designers into first, last;
  call dbms_output.put_line(last || ', ' || first);

  set rows_fetched = CURSOR_ROWCOUNT(Designers);
  call dbms_output.put_line(rows_fetched || ' rows fetched.');

  close Designers;
end %

call rowcount_test() %

connect reset %
terminate %

次のタスク

SQL プロシージャーを実行するか、SQL 関数を呼び出します。