存储过程代码为:

create or replace procedure proc_test(pCursor  OUT pak_pub.ut_cursor) AS
begin
-- 使用游标
open pCursor for select * from temp;
end ;

其中pak_pub.ut_cursor的定义为:

/*创建一个package存放定义的游标*/
create or replace package pak_pub
as
type ut_cursor is ref cursor;
end;

C#执行oracle存储过程:

            //存储过程参数设置
OracleParameter[] par =
{
new OracleParameter("pCursor", OracleType.Cursor)
};
par[].Direction = ParameterDirection.Output;
DataTable re = new DBHelper(connection).GetDataTable("proc_test",CommandType.StoredProcedure, par);
DBHelper类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Data.OracleClient; namespace Jory.Core.Utility
{
public class DBHelper
{
#region 数据库连接字符串 /// <summary>
/// 数据库连接字符串
/// </summary>
private string conStr { get; set; }
public DBHelper()
{
conStr = "";
} public DBHelper(PbConnection connection)
{
conStr = connection.ConnectionString;
}
#endregion #region 数据的增删改
/// <summary>
/// 数据的增删改
/// </summary>
/// <param name="sql"></param>
/// <param name="opar"></param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, CommandType commandType, params OracleParameter[] opar)
{
using (OracleConnection con = new OracleConnection(conStr))
{
using (OracleCommand cmd = new OracleCommand(sql, con))
{
con.Open();
// 设置命令文本(存储过程名或SQL语句)
cmd.CommandType = commandType;
cmd.Parameters.AddRange(opar);
return cmd.ExecuteNonQuery();
}
}
}
#endregion #region 数据查询结果集为一行一列
/// <summary>
/// 数据查询结果集为一行一列
/// </summary>
/// <param name="sql"></param>
/// <param name="opar"></param>
/// <returns></returns>
public object ExecuteScalar(string sql, CommandType commandType, params OracleParameter[] opar)
{
using (OracleConnection con = new OracleConnection(conStr))
{
using (OracleCommand cmd = new OracleCommand(sql, con))
{
cmd.Parameters.AddRange(opar);
// 设置命令文本(存储过程名或SQL语句)
cmd.CommandType = commandType;
con.Open();
return cmd.ExecuteScalar();
}
}
}
#endregion #region 返回查询结果集Table
/// <summary>
/// 返回查询结果集Table
/// </summary>
/// <param name="sql"></param>
/// <param name="opar"></param>
/// <returns></returns>
public DataTable GetDataTable(string sql, CommandType commandType, params OracleParameter[] opar)
{
DataTable dt = new DataTable();
using (OracleDataAdapter dap = new OracleDataAdapter(sql, conStr))
{
dap.SelectCommand.Parameters.AddRange(opar);
dap.SelectCommand.CommandType = commandType;
dap.Fill(dt);
}
return dt;
}
#endregion #region 返回查询结果集DataReader
/// <summary>
/// 返回查询结果集DataReader
/// </summary>
/// <param name="sql"></param>
/// <param name="opar"></param>
/// <returns></returns>
public OracleDataReader DataReader(string sql, CommandType commandType, params OracleParameter[] opar)
{
OracleConnection con = new OracleConnection();
using (OracleCommand cmd = new OracleCommand(sql, con))
{
cmd.CommandType = commandType;
cmd.Parameters.AddRange(opar);
try
{
con.Open();
// 执行完关闭对象 con
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
con.Close();
con.Dispose();
throw;
}
}
}
#endregion
}
}
PbConnection类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Jory.FrameWork.Common
{
public class PbConnection
{
public string ConnectionString
{
get;
set;
} public PbConnection()
{
}
public PbConnection(string connectionString)
{
ConnectionString = connectionString;
}
}
}
												

C#执行oracle返回游标类型的存储过程的更多相关文章

  1. C#(在WeBAPI)获取Oracle(在PL/SQL)游标类型的存储过程(用到了RefCursor)

    需求:WebAPI服务端,通过Oracle数据库的存储过程,获取数据. 在PL/SQL 建立存储过程:(先来最简单的,就是把整个表都查出来) create or replace procedure S ...

  2. Oracle 返回结果集的 存储过程

    create or replace PROCEDURE SPGETROLELIST ( P_APPCODE IN VARCHAR2 , P_USERROLE IN VARCHAR2 , CUR_RES ...

  3. EF执行SQL返回动态类型

    using System; using System.Data.Common; using System.Data.Entity.Core.Objects; using System.Data.Ent ...

  4. Oracle 存储过程调用返回游标的另一个存储过程。

    一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...

  5. mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储

    存储过程在小公司用的不多,但是如果业务比较复杂或者性能要求比较苛刻的时候存储过程就派上用场了,ibatis的前期的一些版本貌似不支持存储过程因此我选择了mybatis来做实验. 1.无输入和输出参数的 ...

  6. Oracle使用游标为所有用户表添加主键语句

    应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在I ...

  7. oracle ibatis 存储过程 返回游标 嵌套表

    自己解决问题了 问题总结: 1.index by表不能存储在数据库中的type中,故选择嵌套表. 2.ibatis不支持oracle的复合数据类型的返回.(个人理解) 3.替代方案:用返回oracle ...

  8. (转载)oracle 在一个存储过程中调用另一个返回游标的存储过程

    原文链接:http://www.jb51.net/article/20160.htm 实际项目当中经常需要在一个存储过程中调用另一个存储过程返回的游标,本文列举了两种情况讲述具体的操作方法. 第一种情 ...

  9. Matlab调用返回游标的存储过程的分析和处理

    2.Matlab调用Oracl带游标参数输出的存储过程 笔者也是将工作之中遇到的问题进行了搜集与整理,才完成该文的编写,希望能帮助到有需要的朋友. 2.1.PLSQL中的存储过程 PROCEDURE ...

随机推荐

  1. LogMiner详细讲解

    原文地址:LogMiner 一.LogMiner的用途 日志文件中存放着所有进行数据库恢复的数据,记录了针对数据库结构的每一个变化,也就是对数据库操作的所有DML语句. 在Oracle 8i之前,Or ...

  2. J2EE ssm框架-服务启动项内存加载数据及读取。

    1.首先在 Web工程 WEB-INF目录下web.xml中添加 listener: <listener> <listener-class>com.founder.frame. ...

  3. 将.lib库文件转换成.a库文件的工具

    分享如下两个链接: 微盘: http://vdisk.weibo.com/s/ztzPTJIC52mz2 百度云盘: http://pan.baidu.com/s/11gTOc 使用方法,解压文件mi ...

  4. C#和java和android中的NetWorkAdapter,httpRequest,WebView,json,xml

    原文地址:http://blog.csdn.net/intbird C#NetWorkAdapter 20121011.======================================== ...

  5. thinkphp 统计某个字段不重复数 总数

    $this->batch->count('DISTINCT intobatch');

  6. require.js优化器

    项目发布前,require.js优化器可以合并require.js各个模块. 官网: http://requirejs.org/docs/optimization.html 安装 npm instal ...

  7. GoogleAuthenticator

    <?php /** * PHP Class for handling Google Authenticator 2-factor authentication * * @author Micha ...

  8. [转]Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

  9. if....else

    if....else语句是在特定的条件下成立执行的代码,在不成立的时候执行else后面的代码. 语法: if(条件) {条件成立执行}else{条件不成立执行} 下面来写一个简单的实例 以考试成绩为例 ...

  10. Java反射与代理

    Java反射机制与动态代理,使得Java更加强大,Spring核心概念IoC.AOP就是通过反射机制与动态代理实现的. 1       Java反射 示例: User user = new User( ...