这就是存储过程的样子
CREATE OR REPLACE PACKAGE TABLE.PROCEDURES IS
type reference_cursor IS REF CURSOR;
PROCEDURE get_attrs(output out reference_cursor) IS
BEGIN
OPEN output FOR
SELECT *,
FROM ATTRS a
ORDER BY a.id;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END get_attrs;
END PROCEDURES;
/
我想调用get_attrs存储过程并从reference_cursor类型的输出变量中获取输出。
这是我提出的,但它给了我以下错误。
DECLARE
outputTABLE.PROCEDURES.reference_cursor;
output_records TABLE.ATTRS%ROWTYPE;
BEGIN TABLE.PROCEDURES.get_attrs(output);
LOOP
FETCH
output INTO output_records;
EXIT WHEN output_records%NOTFOUND;
dbms_output.put_line(output_records.id);
END LOOP;
CLOSE output;
END;
错误
PLS-00324: cursor attribute may not be applied to non-cursor 'OUTPUT_RECORDS'
知道我可能做错了吗?
答案 0 :(得分:2)
消息很清楚:您正在尝试在非游标元素上使用特定于游标的属性:OUTPUT_RECORDS
。
实际上,CURSOR_RECORDS
不是游标,因此您需要检查要获取的游标上的%NOTFOUND
,而不是您要读取的变量:
EXIT WHEN output%NOTFOUND;
答案 1 :(得分:1)
试试这个。希望它有所帮助。
SET SQLBL ON;
SET DEFINE OFF;
DECLARE
output_tab ATTRS%ROWTYPE;
BEGIN
TABLE.PROCEDURES.get_attrs(output);
LOOP
FETCH output INTO output_tab;
EXIT
WHEN output%NOTFOUND;
dbms_output.put_line(output_tab.id);
END LOOP;
CLOSE output;
END;