REFCURSOR を受け取り、何らかのデータ操作を実行する関数を実行しようとしています。
私の機能をテストするために、私はこのSQL/PLUSコードを持っています:
var some_cursor REFCURSOR;
exec :some_cursor := SCHEMA.test_getcursor;
print some_cursor;
variable res varchar2;
exec :res := SCHEMA.second_function(:some_cursor, 'Other_parameter');
print res;
ここで、最初のtest_getcursor
関数は、カーソルを開き、選択クエリを実行してカーソルを返す単純な関数です。それはうまく機能し、印刷some_cursor
もうまくいきます。
second_function
を呼び出してrefcursorを渡すと、問題が発生します。
関数には次のコードがあります。
type cursor_row
IS RECORD
(field_1 some_field1%type,
field_2 some_field2%type,
field_3 some_field3%type);
new_row cursor_row;
BEGIN
LOOP
fetch PASSED_IN_REFCURSOR INTO new_row --this is where the function fails
...data manipulation...
EXIT WHEN PASSED_IN_REFCURSOR%NOTFOUND;
END LOOP;
CLOSE PASSED_IN_REFCURSOR;
END;
私が得ているエラーはですInvalid Cursor
。
作成した型には、参照カーソルと同じ行数と同じデータ型があると確信しています。
この場合、何が間違っていますか?Oracle 10g、PL/SQL 10.2 を使用しています