0

私はこのようなことをしたいと思います

CREATE OR REPLACE FUNCTION return_cursor RETURN SYS_REFCURSOR IS
        CURSOR theCursor IS
            SELECT 1
            FROM dual;
        myCursor SYS_REFCURSOR;

    BEGIN
        OPEN myCursor for theCursor;
        RETURN myCursor;
END return_cursor;

これを行う方法はありますか?これが必要な理由は、パッケージ内のグローバル スコープで定義されたカーソルがあり、関数の呼び出しのためにそれらを書き直したくないからです。

グローバルカーソルを削除して常に関数を使用することもできますが、これが可能かどうかを知りたいです。ありがとう。

4

1 に答える 1

0

pl/sql カーソルと refcursor は互換性がないため、そのように直接やりたいことを行うことはできません。

1 つのオプションは、代わりにビューを使用することです。

create view theCursor as select 1 from dual;

次に、パッケージ内で、カーソルが使用されたビューから選択するだけです。つまり、代わりに

for r_row in theCursor

書きます

for r_row in (select * from theCursor)

そしてリカーソルのために

open myCursor for select * from refCursor;

そうすれば、この 1 つのケースのためにビュー SQL を書き直す必要がなくなります。

于 2012-12-07T12:01:13.477 に答える