0

ループで、パラメーター化されたカーソルを呼び出しています。特定のステップで、カーソルが行を返す場合、このループは終了し、カーソルを参照カーソルとして返す必要があります。同じクエリを 2 回実行せずに行数を確認するにはどうすればよいですか?

procedure pr_test
(
    v_data varray;
    ,ret_data sys_refcursor
)
as
    cursor c_q(x)
    select * from table
    where col1 = x;
    ...
begin
    ...
    for  in 1..v_data.count loop
        open ret_data for c_q(v_data(i));
                 ----- here some logic is required --------
        /*if rowcount of re_data > 0 then
            return ret_data;
        else
            close ret_data;
        end if;*/
    end loop;
end;
4

1 に答える 1

0

それを達成する方法はありません。カーソルは、生産者と消費者の設計パターンとして機能します。これは、カーソルが完全にフェッチされるまで、返される行数を誰も知らないことを意味します。

OCI では、巻き戻し可能なカーソルを使用できます。これらのカーソルは最初に巻き戻すことができますが、私が知る限り、PL/SQL からはアクセスできません。

于 2014-02-10T11:39:26.237 に答える