我用PL/SQL编写了一个简单的存储过程,以执行相当于
SELECT * FROM tablename以下是返回引用游标的过程
create or replace
procedure proc_name (outVal OUT sys_refcursor) as
myCursor sys_refcursor;
myRecords records%ROWTYPE;
l_sql VARCHAR(2000);
begin
l_sql := 'SELECT * FROM RECORDS';
open myCursor for l_sql;
loop
FETCH myCursor INTO myRecords;
EXIT WHEN myCursor%NOTFOUND;
"DBMS_OUTPUT.put_line('myRecords.name =' || myRecords.name);"
end loop;
close myCursor;
end;现在,当我想在SQL提示符中执行我的过程时,而不想在代码中的引号中包含行,我就这样做。
VARIABLE cr REFCURSOR
EXEC proc_name(:cr)现在我得到一个提示
PL/SQL procedure successfully completed现在,当我尝试执行命令时
print cr;我犯了个错误
ORA-24338: Statement handle not executed请帮我处理这个。我需要知道如何使用存储过程返回的引用游标打印表。我不想在过程本身中打印任何内容,因此我希望将行从过程中全部从引号中移除。
发布于 2012-07-10 09:19:59
您将得到一个错误,因为游标是由过程关闭的,因此不能“打印”。我建议如下:
SET SERVEROUTPUT ON,以便您可以看到DBMS_OUTPUT日志。使用此输出进行调试/日志记录。注意,调用应用程序(这里是SQL*Plus PRINT)的责任是正确地获取和关闭游标,而不是PL/SQL过程。
https://stackoverflow.com/questions/11407767
复制相似问题