我做的是一个带有参数传入的,返回结果集的存储过程

create or replace package syn --创建一个含有四个函数的包声明
as
type type_cursor is ref cursor;  --声明一个返回结果集的格式
procedure in (sta varchar2, result out type_cursor);  --声明四个函数
procedure out (sta varchar2, result out type_cursor);
procedure pd (sta varchar2, result out type_cursor);
procedure ti (sta varchar2, result out type_cursor);
end syn;

 


-- 实现程序包
---------------------
create or replace package body syn
as
procedure in(sta in varchar2, result out type_cursor)
as
begin
open result for select * from tablename where id=sta;
exception
when no_data_found then
raise_application_error('this id','');
end in;

end syn; 

实现包函数的时候注意:

返回数据集要用  open result for select .....from ...

返回一个值要用 select .... into result from ....

 

在sqlplus中调用的时候

var result refcursor  --声明一个变量接收结果集,
 exec syn.in(‘10’,:result);--执行存储过程

提示:PL/SQL 过程已成功完成。

 print :result --展示结果集;

 

在c#中调用的时候

填写参数要注意下面内容:

OracleParameter[] paras ={
new OracleParameter(":sta", OracleDbType.Varchar2,20),
new OracleParameter("result", OracleDbType.RefCursor)
};
paras[0].Value = sta;

paras[0].Direction = System.Data.ParameterDirection.Input;
paras[1].Direction = System.Data.ParameterDirection.Output;