【pl/sql】存储过程返回一个记录集!

[复制链接]
查看11 | 回复1 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
我想做一个过程,往里面传一些参数后,返回一个记录集,
我选择了返回一个游标,
过程pkg_test2.p_test('1','2004',v_cur_test),
其中v_cur_test是一个游标变量,
----------------
declare
type cur_test1 is ref cursor;
type rec_test isrecord
(
stcd varchar(8),
cysj varchar(8),
codcr number
);
v_rec_test rec_test;
v_cur_test cur_test1;
v_stcd varchar2(8);
v_cysj varchar2(8);
v_codcr number;
begin
pkg_test2.p_test('1','2004',v_cur_test);
open v_cur_test;
loop
fetch v_cur_test into v_rec_test;
exit when v_cur_test%notfound;
v_stcd:=v_rec_test.stcd;
v_cysj:=v_rec_test.cysj;
v_codcr:=v_rec_test.codcr;
dbms_output.put_line(v_stcd||v_cysj||v_codcr);
end loop;
close v_cur_test;
end;
ORA-06550: 第 16 行, 第 1 列:
PLS-00382: 表达式类型错误
ORA-06550: 第 16 行, 第 1 列:
PL/SQL: SQL Statement ignored
-------------------
我的意图是想把这个返回的游标读出来,
但是系统报错,
是什么原因,我在测试过程p_test('1','2004',v_cur_test)的时候,
可以看到v_cur_test中有记录,
但是v_cur_test为什么不能想普通的游标那样进行处理了???
请教!!!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
附上我建的package
---------------------------
create or replace package pkg_test2 is
TYPE t_wq_nm_d IS REF CURSOR;
procedure p_test(a in varchar,cysj in varchar,cur_testout t_wq_nm_d) ;
end pkg_test2;
------------------------------
create or replace package body pkg_test2
as
procedure p_test(a in varchar,cysj in varchar,cur_test out t_wq_nm_d) is
var_cysj varchar2(4);
var_stcd varchar2(8);
var_cysj1 varchar2(4);
var_codcr number;
begin

if a='1' then
var_cysj:=cysj;
open cur_test for
select stcd,to_char(getm,'yyyy') cysj,codcr
from wq_nm_d
where to_char(getm,'yyyy')=var_cysj;
elsif a='2' then
open cur_test for
select stcd,getm,codcr
from wq_nm_d;
end if;
end p_test;
end pkg_test2;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行