我正在尝试执行一个接收 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
.
我确信我创建的类型与 ref 游标具有相同的行数和相同的数据类型。
在这种情况下我做错了什么?我正在使用 Oracle 10g、PL/SQL 10.2