码迷,mamicode.com
首页 > 数据库 > 详细

oracle创建存储过程并返回结果集(附C#调用代码)

时间:2015-06-28 21:32:58      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

使用存储过程中,最常用的莫过于查询数据表,并返回结果集。

在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成。但是在Oracle中并不支持这种写法,那么我们怎么实现跟SQL SERVER同样的功能呢?且看以下代码:

create or replace procedure sp_getdept

(rep_type in varchar2,sel in varchar2,result out sys_refcursor)

as

     seq varchar2(40);
     info varchar2(40);

begin

    if rep_type = 1 then
          open result for select * from help;
     end IF;
     if rep_type = 2 then
        select seq,info into seq,info from help where rownum=1;
     end if;

end;

通过代码可以看到,oracle中通过游标sys_refcursor实现返回一个table格式的结构集。注意定义方式result out sys_refcursor,跟C#中out 参数类型有点类似。

sys_refcursor和 cursor 比较:

sys_refcursor不能用open,close ,fetch 进行操作。可以用作参数。

cursor可以用 open,close ,fetch操作。不可以用作参数。

 

下面是C#调用上例存储过程的代码:

 OracleConnection con = new OracleConnection("Password=manager;User ID=SYSTEM;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));");

            OracleCommand cmd = new OracleCommand("sp_getdept", con);

            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameter p0 = new OracleParameter("rep_type", OracleType.VarChar);

            p0.Direction = ParameterDirection.Input;

            cmd.Parameters.Add(p0);

            cmd.Parameters["rep_type"].Value = "2";

            OracleParameter p1 = new OracleParameter("result", OracleType.Cursor);

            p1.Direction = System.Data.ParameterDirection.Output;

            cmd.Parameters.Add(p1);

            OracleParameter p2 = new OracleParameter("sel", OracleType.VarChar);

            p0.Direction = ParameterDirection.Input;

            cmd.Parameters.Add(p2);

            cmd.Parameters["sel"].Value = "1";

            OracleDataAdapter da = new OracleDataAdapter(cmd);

            DataSet ds = new DataSet();

            da.Fill(ds);

            Console.WriteLine(ds.Tables[0].Rows[5][0].ToString());
            Console.ReadLine();

希望能对您有所帮助。^_^。

 

oracle创建存储过程并返回结果集(附C#调用代码)

标签:

原文地址:http://www.cnblogs.com/JinvidLiang/p/4606059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!