zoukankan      html  css  js  c++  java
  • oracle创建存储过程并返回结果集(附C#调用代码)

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

    在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();

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

  • 相关阅读:
    MySQL学习--标量函数之日期函数
    MySQL学习-- case表达式
    音视频推流方法与工具使用
    音视频基础知识
    音视频测试点
    postman处理二进制流文件
    postman脚本之时间处理
    移动性能测试之adb内存相关
    Proxychains安装
    Valgrind的安装及简单使用
  • 原文地址:https://www.cnblogs.com/JinvidLiang/p/4606059.html
Copyright © 2011-2022 走看看