Oracle使用存储过程返回查询游标

如果报表逻辑非常复杂的话, 可以把报表逻辑放到存储过程里,加工一个全局临时表。
前端查询的时候只查询临时表即可。只是第一次查询需要忍受加工的时间。

--创建存储过程,返回SYS_REFCURSOR
CREATE OR REPLACE PROCEDURE P_GET_AGENT(V_AGENT_CATE IN VARCHAR2,
                                        V_PAGE       IN INTEGER,
                                        O_CURSOR     OUT SYS_REFCURSOR) IS
BEGIN
  INSERT INTO TMP_TAB_T_AGENT(AGENT_ID)
    SELECT AGENT_ID FROM T_AGENT TA WHERE TA.AGENT_CATE = V_AGENT_CATE;

  OPEN O_CURSOR FOR
    SELECT AGENT_ID
      FROM (SELECT ROWNUM AS RN, AGENT_ID
              FROM (SELECT AGENT_ID FROM TMP_TAB_T_AGENT ORDER BY AGENT_ID)
             WHERE ROWNUM < V_PAGE * 10)
     WHERE RN >= (V_PAGE - 1) * 10;
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(‘wrong‘);
END;

--调用存储过程,
DECLARE
  V_CURSOR   SYS_REFCURSOR;
  V_AGENT_ID T_AGENT.AGENT_ID%TYPE;
BEGIN
  -- Call the procedure
  P_GET_AGENT(V_AGENT_CATE => ‘5‘, V_PAGE => 4, O_CURSOR => V_CURSOR);

  LOOP
    FETCH V_CURSOR
      INTO V_AGENT_ID;
    EXIT WHEN V_CURSOR%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(V_AGENT_ID);
  END LOOP;

  CLOSE V_CURSOR;
  COMMIT;
END;

  

原文地址:https://www.cnblogs.com/fooobabar/p/11133556.html

时间: 2024-10-09 22:54:42

Oracle使用存储过程返回查询游标的相关文章

C#显示存储过程返回的游标数据集

1.--Oracle 创建包 申明自定义游标类型 create or replace package pk_Var is type csr_tp is ref cursor; end; 2.--Oracle 创建存储过程返回数据集合 CREATE OR REPLACE PROCEDURE pr_getdata( v_empno VARCHAR2 ,  RC1 out PK_Var.csr_tp  ) AS     sSQL  varchar2(2000) ; begin     sSQL := 

Oracle调用存储过程返回游标结果

/** 调用Oracle存储过程 */ public ResultSet queryForAllJSD_NEWEST(final String hpCode, final String id) { System.out.println("hpCode:"+hpCode+",id:"+id); ResultSet rs = (ResultSet)this.jdbctemplate.execute("{call pro_querybcb_newest(? ,

怎样让Oracle的存储过程返回结果集

Oracle存储过程: CREATE OR REPLACE PROCEDURE getcity ( citycode IN VARCHAR2, ref_cursor OUT sys_refcursor /* 这个sys_refcursor类型在SYS.STANDARD包中 */ ) AS BEGIN OPEN ref_cursor FOR SELECT * FROM tb_city_code WHERE city_code = citycode; END; / Java调用代码: try { D

Mysql中使用存储过程返回查询多个表的数据信息

-- 测试手机号 call P_Base_CheckLogin('15584463676'); -- 测试登录名 call P_Base_CheckLogin('sch000001') -- 测试身份证号 call P_Base_CheckLogin('080428402304032042') -- 测试学生手机号 call P_Base_CheckLogin('13019212198') drop PROCEDURE IF EXISTS P_Base_CheckLogin; create pr

oracle存储过程返回结果集

http://www.2cto.com/database/201204/127180.html oracle实现存储过程返回查询结果集合的方法 --实现存储过程返回查询结果集合的方法 ,以下代码来自网络整理 http://topic.csdn.net/u/20090721/12/ba403739-3212-4016-83ec-2a7062f21081.html Java代码 --第一种方法 create or replace Package SYSBasic as  www.2cto.com t

oracle的存储过程

用了两年Oracle还没写过存储过程,真是十分惭愧,从今天开始学习Oracle存储过程,完全零起点,争取每日一篇学习笔记,可能开始认识的不全面甚至有错误,但坚持下来一定会有收获. 1. 建立一个存储过程 create or replace PROCEDURE firstPro IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END; 其中IS关键字替换为AS关键字结果不会出现任何变化,大多认为他们是等同的,但也有一种说法解释为:一般PACKAGE 或

java读取ORACLE 存储过程 返回游标(cursor) 格式 读取到List中

/**  * 执行存储过程(目前只支持返回一个游标) never null  *   * @param sql  *            执行的语句  * @param index  *            当前游标的下标  * @param obj  *            参数(用来替换sql语句中的?)  * @param rop  *            注册oracle的输出参数(注意,这里假如下标为1的是输入参数,为2的输出参数  *            则游标要以输出参数

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 索引、视图、游标、存储过程和触发器

1 索引 目标是为了提高查询的速度,当用户对查询速度不满意而需要对数据库的性能进行调校时,优先考虑建立索引. 数据库中索引的概念与书索引的概念非常类似,不同之处在于数据库索引用来在表中查找特定的行. 索引缺点:向表中“添加/删除”行时,必须花费额外的时间来更新该行的索引. 创建索引的时机:当需要从大表中检索少数几行时,都应该对列创建索引. 基本准则:当任何单个查询要检索的行<=整个表行数的10%时,索引就非常有用.自动创建索引:表的主键和唯一键将自动创建索引 . 1.1 语法 create [u