我做的是一个带有参数传入的,返回结果集的存储过程
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;
浙公网安备 33010602011771号