通过sys_refcursor可以实现procedure直接返回结果集不必通过package
SQL> create table ttt(id int , name varchar2(10));
表已创建。
SQL> insert into ttt values(1,'a');
已创建 1 行。
SQL> insert into ttt values(2,'b');
已创建 1 行。
SQL> commit;
提交完成。
SQL>create or replace procedure getmult(result out sys_refcursor)
2 is
3 begin
4 open result for select * from ttt;
5* end;
SQL> /
过程已创建。
SQL> variable a refcursor
SQL> exec getmult(:a);
PL/SQL 过程已成功完成。
SQL> print :a;
ID NAME
---------- ----------
1 a
2 b
--定义sys_refcursor类型的变量也可以直接返回结果集
sys_refcursor就是系统事先定义好的一个ref cursor类型的数据类型
SQL> select * into :a from ttt;
ID NAME
---------- ----------
1 a
2 b
--利用cursor express可以直接返回结果集
SQL> select cursor(select * from ttt) from dual;
CURSOR(SELECT*FROMTT
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
ID NAME
---------- ----------
1 a
2 b
http://warehouse.itpub.net/post/777/449133
--------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE DFMS.sp_assy_load_relation (
i_system_sn IN VARCHAR2,
i_work_group IN VARCHAR2,
o_is_failed OUT INTEGER,
o_res OUT VARCHAR2,
o_relation_set OUT sys_refcursor
)
IS
v_eor_key VARCHAR2 (50);
v_record_count INTEGER;
v_work_order VARCHAR2 (25);
v_plant_code VARCHAR2 (20);
v_parent_wo VARCHAR2 (25);
v_wo_type VARCHAR2 (15);
v_route_code NUMBER;
v_model_name VARCHAR2 (35);
v_model_ver VARCHAR2 (10);
v_gmid VARCHAR2 (50);
v_flag INTEGER := 1;
ex EXCEPTION;
BEGIN
v_eor_key := '-1';
sp_assy_generate_relation (i_system_sn, v_flag, o_res);
IF o_res <> 'OK'
THEN
RAISE ex;
END IF;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-605648/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-605648/