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 = '' then
open result for select * from help;
end IF;
if rep_type = '' 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 = "";

            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 = "";

            OracleDataAdapter da = new OracleDataAdapter(cmd);

            DataSet ds = new DataSet();

            da.Fill(ds);

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

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

上一篇:WPFDispatcher示例


下一篇:使用vmware提示无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件