怎样让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 {
          DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
          Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:wjw", "sms", "sms");

          CallableStatement stmt = conn.prepareCall("BEGIN GETCITY(?, ?); END;");
          //CallableStatement stmt = conn.prepareCall("{ call GETCITY(?, ?) }");  //用此调用方法不能实现多行语法

          stmt.setString(1, "021");
          stmt.registerOutParameter(2, -10 /* OracleTypes.CURSOR = -10 */); //REF CURSOR(OracleTypes.CURSOR==-10)
          stmt.execute();
          ResultSet rs = (ResultSet) stmt.getObject(2);
          while (rs.next()) {
            System.out.println(rs.getString("CITY_NAME"));
          }
          rs.close();
          rs = null;
          stmt.close();
          stmt = null;
          conn.close();
          conn = null;
        }
        catch (SQLException e) {
          System.out.println(e.getLocalizedMessage());
        }
时间: 2024-10-12 20:02:56

怎样让Oracle的存储过程返回结果集的相关文章

oracle 存储过程返回结果集

好久没上来了, 难道今天工作时间稍有空闲, 研究了一下oracle存储过程返回结果集. 配合oracle临时表, 使用存储过程来返回结果集的数据读取方式可以解决海量数据表与其他表的连接问题. 在存储过程中先根据过滤条件从海量数据表中选出符合条件的记录并存放到临时中, 可以通过一个视图将临时表与其他相关表连接起来, 从而避免海量数据造成的连接效率问题. 本文只讨论使用存储过程返回结果集. 具体实现如下: -- 启用服务器输出---------------------set serveroutput

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

mybatis调用mysql存储过程返回结果集

存储过程中经常需要返回结果集. Mysql 中直接用 select 即可返回结果集.而 oracle 则需要使用游标来返回结果集.这一点 Mysql 相对比较方便,如下代码即可实现输出结果集: 存储过程定义: DELIMITER $$ DROP procedure IF EXISTS pro_sql_data1 $$ CREATE procedure pro_sql_data1(in sear_name varchar(2000)) BEGIN if sear_name is not null

C#中使用Oracle存储过程返回结果集

问题: 在MSSQLServer中定义的存储过程可以直接返回一个数据集,如: create procedure sp_getAllEmployees as SELECT * FROM [NORTHWND].[dbo].[Employees] 在Oracle数据库中这样定义是错误的,怎么解决? 办法: Oracle中可以使用游标(Cursor)对数据集进行操作,但在存储过程输出参数中直接使用Cursor错误,此时的Cursor应该是一个定义游标的关键字并非类型,所以先要定义一个包,在包中声明全局的

Oracle 存储过程 返回结果集

CREATE OR REPLACE PACKAGE PKG_CUST_RISK IS -- AUTHOR : ADMINISTRATOR -- CREATED : 2014/4/22 10:00:27 -- PURPOSE : 客户风险 VI_ERRORCODE M_LOG.ERRORCODE%TYPE DEFAULT 0; --数值型 异常代码 VS_ERRORTEXT M_LOG.ERRORTEXT%TYPE DEFAULT NULL; --字符型 异常描述 VS_OWNER M_LOG.O

JFinal调用Oracle存储过程返回结果集

表结构 存储过程 CREATE OR REPLACE PROCEDURE TEST3(TID IN INTEGER,O OUT SYS_REFCURSOR) AS BEGIN IF(TID>0) THEN OPEN O FOR SELECT * FROM XHSCK.T_ADMINISTRATIVE_LEVEL T WHERE T.ADMINISTRATIVE_LEVEL_ID = TID; ELSE OPEN O FOR SELECT * FROM XHSCK.T_ADMINISTRATIVE

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(? ,

python 调用mysql存储过程返回结果集

存储过程: delimiter | create procedure get_product_info(in imid int(10),int iuser varchar(20)) begin select * from tb_test where mid = imid and user = iuser; end; | delimiter ; python调用: import mysql.connector cnx = mysql.connector.connect( user='test',p

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(AG