日期:2014-05-17  浏览次数:20966 次

一个很简单的存储过程
我想实现存储过程返回结果集,参考网上的资料,我的步骤如下:
1.创建程序包th.pkg_cur
CREATE   OR   REPLACE     PACKAGE   "TH ". "PKG_CUR "     AS
TYPE   myrcType   IS   REF   CURSOR;
END   pkg_cur;
--------
2.创建存储过程th.my_cur
CREATE   OR   REPLACE     PROCEDURE   "TH ". "MY_CUR "       (p_cursor   out  
        pkg_cur.myrcType)       is      
begin      
    open   p_cursor   for  
        select   *   from   fenxh;      
end;
说明:表fenxh中只有两列,并且都是char类型。
--------
3.在TOAD工具中执行此过程
begin
my_cur;
end;
--------
4.错误如下
ORA-06550:   第   2   行,   第   1   列:  
PLS-00306:   调用   'MY_CUR '   时参数个数或类型错误
ORA-06550:   第   2   行,   第   1   列:  
PL/SQL:   Statement   ignored
--------
请问:是什么原因呢?
是不是调用错误啊?
怎么改正?
谢谢!

------解决方案--------------------
declare
p_cur pkg_cur.myrcType;
begin
mu_cur(p_cur);
p_cur.close;
end;
调用的时候怎么能不传入参数呢?
即使这个参数是out型的。
------解决方案--------------------
在包体里面要包含这个存储过程呀。
------解决方案--------------------
--创建包头
create or replace package pkg_cur as

type myrctype is ref cursor;

procedure my_cur
(
p_cursor out myrctype
);

end pkg_cur;


--创建包体
create or replace package body pkg_cur as

procedure p_cur
(
p_cursor out myrctype
)is
begin
open p_cursor for
select * from fenxh;
end p_cur;

end pkg_cur;