create or replace package demo_pckg
as
type cursor_type is ref cursor;
procedure demo_proc(i_deptno number,o_result out cursor_type);
end;
/
create or replace package body demo_pckg
as
procedure demo_proc(i_deptno number,o_result out cursor_type)
as
begin
open o_result for
select * from employees
where department_id=i_deptno;
end;
end;
/
如果我想打印OUT光标变量,我该怎么办?
答案 0 :(得分:2)
SQL * Plus或SQL Developer最简单的方法是使用variable
和print
:
var deptno number
var result refcursor
exec :deptno := 10;
exec demo_pckg.demo_proc(:deptno, :result);
print result
或者:
var result refcursor
declare
deptno emplyees.department_id%type;;
begin
deptno := 10;
demo_pckg.demo_proc(deptno, :result);
end;
/
print result
result
在过程调用中被视为绑定变量,所以它在那里以:
为前缀,但是它是SQL * Plus的本机变量,所以它没有{ {1}}致电。您可以在SQL * Plus中运行,也可以在SQL Developer中运行,该脚本将在“脚本输出”窗口中显示结果。
当然,您可以在过程调用中对print
值进行硬编码,而不是使用变量来保存它。
如果您是从Java或其他一些客户端程序中调用它,则可以将deptno
游标视为任何其他结果集。
您也可以在程序中将OUT
声明为result
,而不是声明自己的类型。
答案 1 :(得分:1)
dbms_output.put_line
打印到标准输出。您需要启用服务器输出以查看结果:set serveroutput on
。打开服务器输出应该在您的环境中完成,如sqlplus等。
您需要使用select column1 into var1 from ...
将结果选择到变量中,以便稍后使用dbms_output.put_line('my var1: ' || var1);