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_LEVEL T WHERE T.ADMINISTRATIVE_LEVEL_ID = 1;
  END IF;
END;
  • Java代码(调用类)
WallFilter wallFilter = new WallFilter();
DruidPlugin druid = new DruidPlugin(getProperty("jdbc.url"),
		getProperty("jdbc.username"),
		getProperty("jdbc.password").trim()
		  ,getProperty("jdbc.driver"));
druid.addFilter(new StatFilter());
druid.addFilter(wallFilter);
//连接池最大使用连接数量
druid.setMaxActive(getPropertyToInt("maxActive",100));
//连接池最小空闲
druid.setMinIdle(getPropertyToInt("minIdle",10));
//初始化大小
druid.setInitialSize(getPropertyToInt("initialSize",10));
druid.start();
Config cfg = new Config("1", druid.getDataSource());
DbKit.addConfig(cfg);
List<Record> list = (List<Record>) Db.use("1").execute(new MyCallBack(6,cfg));
System.out.println(list.get(0).getStr("ADMINISTRATIVE_LEVEL_NAME"));
  • Java代码(回调类)
public class MyCallBack implements ICallback {
	public int tid;
	public Config cfg;
    public ResultSet rs = null;
    MyCallBack(int tid,Config cfg){
    	this.tid=tid;
    	this.cfg=cfg;
    }
	@Override
	public Object call(Connection conn) throws SQLException {
		CallableStatement proc = null;
         proc = conn.prepareCall("{ call test3(?,?) }");
         proc.setInt(1, tid);
         proc.registerOutParameter(2, OracleTypes.CURSOR);
         proc.execute();
         ResultSet s =  (ResultSet) proc.getObject(2);
         List<Record> list = (List<Record>) RecordBuilder.build(cfg, s);
         return list;
	}
}
时间: 2024-08-24 23:46:51

JFinal调用Oracle存储过程返回结果集的相关文章

oracle 存储过程返回结果集

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

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

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

[转].net 调用oracle存储过程返回多个记录集

CREATE OR REPLACE PROCEDURE p_query_cs ( p_infotype IN VARCHAR2, p_fromareacode IN VARCHAR2, p_toareacode IN VARCHAR2, p_keytype IN NUMBER, r_cursor1 OUT sys_refcursor, --结果集 r_cursor2 OUT sys_refcursor --结果集 ) IS BEGIN OPEN r_cursor1 FOR SELECT * FR

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

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

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 存储过程 返回结果集

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

C#调用 Oracle 存储过程样例代码

-- 建表CREATE TABLE sale_report (     sale_date DATE NOT NULL ,     sale_item VARCHAR(2) NOT NULL ,      sale_money DECIMAL(10,2) NOT NULL,      PRIMARY KEY(sale_date, sale_item)); -- 測试数据DECLAREv_begin_day DATE;v_end_day DATE;BEGIN v_begin_day := TO_D

java代码调用oracle存储过程

一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); 2.创建CallableStatement CallableStatement statement = conn.prepareCall(sql); 3.设置参数 statement.setInt(1, id); statement.registerOutParameter(2, Types.VA