Oracle :一次数据库连接,返回多个结果集

gooliugle 原文 Oracle :一次数据库连接,返回多个结果集(带参数)!

1、建立包规范

create or replace package QX_GDJTJ is
  -- Author  : xxx
  -- Created : 2012-1-1
  -- Purpose : 统计主设备缺陷

TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GETGDJQXTJ
(
    cur_id in varchar,
    cur_GDJQXTJ1 OUT T_CURSOR,
    cur_GDJQXTJ2 OUT T_CURSOR,
    cur_GDJQXTJ3 OUT T_CURSOR
);

end QX_GDJTJ;

2、建立包体

create or replace package body QX_GDJTJ is
PROCEDURE GETGDJQXTJ
(
    cur_id in varchar,
    cur_GDJQXTJ1 OUT T_CURSOR,
    cur_GDJQXTJ2 OUT T_CURSOR,
    cur_GDJQXTJ3 OUT T_CURSOR
)
IS
BEGIN
OPEN cur_GDJQXTJ1 FOR
select (select count(0) from HVM_VIEW_QX where voltage=‘500kV‘ and gdjid=cur_id )-(select count(0) from HVM_VIEW_QX where voltage=‘500kV‘ and gdjid=cur_id and cljg like ‘%合格%‘ and cljg not like ‘%不合格%‘) from dual;
OPEN cur_GDJQXTJ2 FOR
select (select count(0) from HVM_VIEW_QX where voltage=‘220kV‘ and gdjid=cur_id )-(select count(0) from HVM_VIEW_QX where voltage=‘220kV‘ and gdjid=cur_id and cljg like ‘%合格%‘ and cljg not like ‘%不合格%‘) from dual;
OPEN cur_GDJQXTJ3 FOR
select (select count(0) from HVM_VIEW_QX where voltage=‘110kV‘ and gdjid=cur_id )-(select count(0) from HVM_VIEW_QX where voltage=‘110kV‘ and gdjid=cur_id and cljg like ‘%合格%‘ and cljg not like ‘%不合格%‘) from dual;
end GETGDJQXTJ;
end QX_GDJTJ;

3、C#调用,返回结果集

public static DataSet GetDataSet(string gdjId, string proName, string[] cursors)
{
    OracleConnection Conn = GetConn();
    DataSet ds = new DataSet();
    try
    {
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = Conn;
    cmd.CommandText = proName;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("cur_id", OracleType.VarChar).Value = gdjId;
    for (int i = 0; i < cursors.Length; i++)
    {
      cmd.Parameters.Add(cursors[i], OracleType.Cursor).Direction = ParameterDirection.Output;
    }
        OracleDataAdapter da = new OracleDataAdapter(cmd);
        da.Fill(ds);
    }
    catch (System.Data.OracleClient.OracleException ex)
    {
        throw new Exception(ex.Message);
    }
    finally
    {
        Conn.Close();
    }
    return ds;
}
时间: 2024-10-12 15:41:37

Oracle :一次数据库连接,返回多个结果集的相关文章

Oracle中函数/过程返回多个值(结果集)

Oracle中函数/过程返回结果集的几种方式: 以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过. (1) 返回游标: return的类型为:SYS_REFCURSOR 之后在IS里面定义变量:curr SYS_REFCURSOR; 最后在函数体中写:          open cur for             select ......;          return cur; 例: CREATE OR REPLACE FUNCTION A_Te

【数据库】Oracle 11g使用命令导入导出表,导出结果集

[数据库]Oracle 11g使用命令导入导出表,导出结果集 很久没敲命令进行Oracle数据库表的导入(imp),导出(exp)了,今天猛一敲,发现有些命令居然忘了,顺手写下这篇博文,记录一下! exp本地导出命令: 1 exp username/[email protected] file=d:\demo.dmpfull=y 2 exp username/[email protected] file=d:\demo.dmpowner=(xx) 3 exp username/[email pr

Atitit &#160;jdbc 处理返回多个结果集

Atitit  jdbc 处理返回多个结果集 Statement接口提供了三种执行SQL语句的方法: executeQuery.executeUpdate和execute.使用哪一个方法由SQL语句所产生的内容决定. executeQuery   方法用语返回单个结果集 execute方法应该仅在语句能返回多个ResultSet对象.多个更新计数或ResultSet对象与更新计数的组合时使用.当执行某个已存储过程或动态执行未知SQL字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情

windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 能够放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 假设原来的ocr 位置已经不存在,则必须使用同样的名字在原来同样的位置创建一个空 OCR . 建议使用下面步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa

windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 可以放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 如果原来的ocr 位置已经不存在,则必须使用相同的名字在原来相同的位置创建一个空 OCR . 建议使用以下步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa

Oracle数据库精讲课程之Rac管理(集群组件、性能监控及调整、节点管理、备份和恢复)

对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 本课程主要是介绍Oracle RAC体系结构与工作机制,了解并掌握RAC数据库下的相关技术,如:cache Fusion. Failover.load balance.FAN.OCR和Voting disk等,通过VMWARE虚拟环境,实践演练RAC数据库的安装部署.RAC数据库日常性能监控.备份和恢复.实例增加和删除以及补丁安装等操作,通过本课程的学习,学员在掌握RAC理论知识基础上,能够熟练掌握RAC数据库的日常管理操作. 课

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(

ibatis.net调用oracle存储过返回游标SYS_REFCURSOR结果集

最近在用ibatis.net框架和oracle 11g开发一套程序.其中有一个需求就是通过存储过程,查询指定条件的数据集. 但是在开发的过程中遇到了问题,问题如下: 1.如何通过ibatis.net执行存储过程? 2.通过ibatis.net执行存储过程时,如何传参数? 3.通过ibatis.net执行存储过程时,传递参数过程中,dbType和type是如何对应的? 4.oracle存储过程中返回的游标集合SYS_REFCURSOR对应dbType是什么? 5.通过ibatis.net执行存储过

oracle 正则查询json返回报文中某个字段的值

接口返回报文为json 格式,如下: {"body":{"businessinfo":{"c1rate":"25.00","c2rate":"0.00","c4rate":"0.00","c5rate":"0.00","c6rate":"6.00","c8ra