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

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

时间: 2024-10-10 10:29:03

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

oracle的存储过程如何返回结果集

CREATE OR REPLACE PACKAGE pkg_test AS     TYPE myrctype IS REF CURSOR;       PROCEDURE get (p_id NUMBER, p_rc OUT myrctype); END pkg_test; -------------------------------------------------------------------CREATE OR REPLACE PACKAGE BODY pkg_test AS  

存储过程不返回记录集导致ADO程序出错

HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF()       {return m_pRecordset->adoEOF == VARIANT_TRUE;}; m_pRecordset->adoEOF 将执行下面的函数(见msado15.tli) 1    inline VARIANT_BOOL Recordset15::GetadoEOF (

oracle创建-存储过程和函数

--创建存储过程 CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p( --参数IN表示输入参数, --OUT表示输出参数,类型可以使用任意Oracle中的合法类型. is_ym IN CHAR) AS --定义变量 vs_msg VARCHAR2(4000); --错误信息变量 vs_ym_beg CHAR(6); --起始月份 vs_ym_end CHAR(6); --终止月份 vs_ym_sn_beg CHAR(6); --同期起始月份 vs_ym_sn_e

Oracle创建存储过程

  1.基本语法 create or replace procedure update_emp_sal (Name in out type, Name in out type, ... ) is begin end update_emp_sal; 2.写一个简单的例子修改emp表的ename字段 create or replace procedure update_emp ( v_empno varchar2, v_ename varchar2 ) is begin update emp set

Oracle中函数如何返回结果集

在Oracle中,用函数返回结果集有时候要用到,下面是demo: 1 2 3 4 5 6 7 create or replace type t_test as object ( id integer, create_time date, object_name varchar2(60) ); create or replace type t_test_table as table of t_test; 1.用数组的方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

mybatis springmvc调用oracle存储过程,返回记录集

参考: http://bbs.csdn.net/topics/390866155 辅助参考: http://www.2cto.com/kf/201307/226848.html http://blog.csdn.net/grhlove123/article/details/7549290 在smm中,这样的controller编写方式是不一样的: 存储过程: create or replace procedure pro_getchart(chart_cur out sys_refcursor)

ORACLE创建自定义函数返回varchar类型

需求描述:两张表,如下,需要查询tmp1表中id_new在tmp2中的nameselect from tmp1; select from tmp2;方法一:好处:简单,直接sql展示劣处:如果主表数据量太大,十几亿的话,性能会大大下降,此时建议第二种方法select a.id_old,to_char(wm_concat(distinct a.id_new)) id_new,to_char(wm_concat(distinct b.name)) namefrom tmp2 b,(select a.

oracle创建存储过程中遇到的问题

create or replace PROCEDURE CLEAR AS tname varchar(200);BEGIN tname:='''immediate trace name flush_cache'''; ------->>这一句中,单引号的作用相当于转义字符,将其中的一个单引号转义为要使用的单引号,不表示oracle中字符串的标                                                                      识,也就是这个

.net 使用oracle 的存储过程有返回值也有数据集

public void GetData(string username, string userip, string userkey, string userareaid, string ypid, string in_provinces, string yearid, out DataTable data, out string out_success, out string out_message) { try { string constr = ConfigurationManager.C