2014-01-19 148 views
0
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游标变量,应该怎么办?打印Oracle PLSQL OUT变量

+1

“印刷”是什么意思?在sqlplus中显示结果集?还有别的吗? – Mat

回答

1

dbms_output.put_line打印到标准输出。您需要启用服务器输出以查看结果:set serveroutput on。对应在您的环境一样的sqlplus等进行 你需要选择的结果到一个变量与select column1 into var1 from ...,这样以后可以用dbms_output.put_line('my var1: ' || var1);

2

从SQL * Plus或SQL Developer中打印出来,最简单的方式开启服务器输出与variableprint

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被视为一个绑定变量i在过程调用中,因此它的前缀为:,但它是SQL * Plus的本地变量,因此它没有用于调用print的变量。您可以在SQL * Plus中运行,也可以作为SQL Developer中的脚本运行,它将在“脚本输出”窗口中显示结果。

无论是哪种情况,您都可以在过程调用中硬编码deptno值,而不是使用变量来分隔变量。

如果您从Java或其他客户端程序调用此方法,则可以像处理其他任何结果集那样对待您的OUT游标。

您也可以在程序中声明resultsys_refcursor,而不是声明自己的类型。