从存储过程中调用 PL/SQL 游标得到结果
Posted
技术标签:
【中文标题】从存储过程中调用 PL/SQL 游标得到结果【英文标题】:Calling PL/SQL cursor from stored procedure to get the result 【发布时间】:2016-07-05 03:51:03 【问题描述】:这就是存储过程的样子
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'
知道我做错了什么吗?
【问题讨论】:
【参考方案1】:消息很清楚:您正在尝试在非光标元素上使用光标特定属性:OUTPUT_RECORDS
。
事实上,CURSOR_RECORDS
不是游标,所以你需要检查你正在获取的游标上的%NOTFOUND
,而不是你正在获取的变量:
EXIT WHEN output%NOTFOUND;
【讨论】:
【参考方案2】:试试这个。希望对您有所帮助。
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;
【讨论】:
以上是关于从存储过程中调用 PL/SQL 游标得到结果的主要内容,如果未能解决你的问题,请参考以下文章