存储函数带引用型游标输出结果集
-- SQL准备:
create table ta(id number,pid integer, name char(100),descri varchar(100),modify_time datetime default sysdate, p_date date default sysdate,p_time time default sysdate ) ;
create table tp(id number,pid integer,pname char(100),descri varchar(100),modify_time datetime default sysdate);
insert into tp values(1, 38 , '财务部', '测试数据变更', '2017-12-12 12:11:11' );
insert into tp values(2, 1 , '财务部', '开发项目', '2017-12-12 12:11:11');
insert into tp values( 3, 2 , '开发部', '测试数据变更', '2017-12-12 12:11:11');
insert into tp values(124,24 , 'dsf', 'dsgrt', '2016-12-12 12:11:11');
insert into ta values( 1, 1 , '张三', NULL, '2017-08-01 09:34:49.458' , '2017-08-01', '09:34:49.458') ;
insert into ta values( 2, 2 , '李四', NULL, '2017-08-01 09:36:51.113' , '2017-08-01', '09:36:51.113') ;
insert into ta values( 3, 2 , '王五', NULL, '2017-08-01 09:36:53.427' , '2017-08-01', '09:36:53.427') ;
create or replace function myfunc_outrefur(refcur_out out sys_refcursor)
return sys_refcursor is refcur_ret sys_refcursor;
begin
open refcur_ret for select * from ta;
open refcur_out for select * from tp;
return refcur_ret;
end ;
/
//代码示例:
XuguConnection conn = new XuguConnection();
conn.ConnectionString = conn_xugu;
try
{
conn.Open();
XuguCommand cmd = new XuguCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "myfunc_outrefur";
cmd.Parameters.Clear();
XuguParameters pa1= new XuguParameters("refcur1",XuguDbType.RefCursor);
pa1.Direction= ParameterDirection.Output;
cmd.Parameters.Add(pa1);
XuguParameters pa2 = new XuguParameters("refcur2", XuguDbType.RefCursor);
pa2.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(pa2);
ret = cmd.ExecuteNonQuery();
//output to reader
XuguDataReader reader_out1 = ((XuguRefCursor)pa1.Value).GetDataReader();
Console.WriteLine("reader_out1.getname(2) = " + reader_out1.GetName(2));
XuguDataReader reader_out2 = ((XuguRefCursor)pa2.Value).GetDataReader();
Console.WriteLine("reader_out2.getname(2) = " + reader_out2.GetName(2));
reader_out1.Close();
reader_out1.Dispose();
reader_out2.Close();
reader_out2.Dispose();
//
cmd.Parameters.Clear();
cmd.Dispose();
conn.Close();
conn.Dispose();
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
conn.Close();
return 0;
}