`

Java调用oracle存储过程通过游标返回临时表

 
阅读更多
CREATE TABLE SFZ_TEST_MANAGER_XG(
       yxgh VARCHAR2(100),
       ygxm VARCHAR2(100),
       position_name VARCHAR2(100)
);

insert into SFZ_TEST_MANAGER_XG values ('abc1','bcd1','cde1');
insert into SFZ_TEST_MANAGER_XG values ('abc2','bcd2','cde2');
insert into SFZ_TEST_MANAGER_XG values ('abc3','bcd3','cde3');
insert into SFZ_TEST_MANAGER_XG values ('abc4','bcd4','cde4');

DROP TABLE SFZ_TEST_MANAGER_XG;

CREATE GLOBAL TEMPORARY TABLE SFZ_TEMP_MANAGER_XG(
       yxgh VARCHAR2(100),
       ygxm VARCHAR2(100),
       position_name VARCHAR2(100)
)ON COMMIT DELETE ROWS;

DROP TABLE SFZ_TEMP_MANAGER_XG;

select * from SFZ_TEST_MANAGER_XG;
select count(*) from SFZ_TEST_MANAGER_XG;

create or replace package sfz_obj
as
 type sfz_cursor is ref cursor;
 procedure proc_sfz_proc_test(user_yxgh IN VARCHAR2,v_table out sfz_cursor);
end sfz_obj;

DROP package sfz_obj;

create or replace package body sfz_obj as 
procedure proc_sfz_proc_test(user_yxgh IN VARCHAR2,v_table out sfz_cursor)
is
BEGIN
   INSERT INTO SFZ_TEMP_MANAGER_XG(YXGH,YGXM,POSITION_NAME) SELECT YXGH,YGXM,POSITION_NAME FROM SFZ_TEST_MANAGER_XG;
   --insert into SFZ_TEMP_MANAGER_XG values ('abc','bcd','cde');
   --insert into SFZ_TEMP_MANAGER_XG values ('abc','bcd','cde');
   --insert into SFZ_TEMP_MANAGER_XG values ('abc','bcd','cde');
   --insert into SFZ_TEMP_MANAGER_XG values ('abc','bcd','cde');
   open v_table for select * from SFZ_TEMP_MANAGER_XG;
end proc_sfz_proc_test;
end sfz_obj;

select * from product_component_version;

package com.zjhcsoft.test.utl;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.driver.OracleTypes;

public class TestOracleProc3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (Exception e) {
			e.printStackTrace();
		}

		Connection conn = null;
		String DBurl = "jdbc:oracle:thin:@134.98.8.168:1521:ora817";
		try {
			conn = DriverManager.getConnection(DBurl, "sfz2", "sfz2_123");
			System.out.println("Getting Connection...");
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		try {
			conn = DriverManager.getConnection(DBurl, "sfz2", "sfz2_123");
			long start = System.currentTimeMillis();
			//最关键一步
			conn.setAutoCommit(false);
			OracleCallableStatement cstmt = (OracleCallableStatement)conn.prepareCall("{call sfz_obj.proc_sfz_proc_test(?,?)}");
			cstmt.setString(1, "");
			cstmt.registerOutParameter(2,OracleTypes.CURSOR);
			cstmt.execute();
			long end = System.currentTimeMillis();
			System.out.println("this procedure consumes "+((end-start)/1000)+" excute time.");
			start = System.currentTimeMillis();
			int i=0;
			ResultSet rs = (ResultSet)cstmt.getObject(2);
			   while (rs.next()) {
				   System.out.println("column"+(i+1)+":"+rs.getString(1)+",  "+rs.getString(2)+",  "+rs.getString(3));
				   i++;
			   } 
			   System.out.println("this procedure has "+(i-1)+" data.");
			end = System.currentTimeMillis();
			System.out.println("show this procedure data consumes "+((end-start)/1000)+" excute time.");
			conn.commit();
			cstmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
分享到:
评论

相关推荐

    21天学通Oracle

    8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11...

    oracle如何合并多个sys_refcursor详解

    一、背景 在数据开发中,有时你需要合并两个动态游标sys_refcursor。... 针对循环调用的,建立一个临时表,循环插入数据到临时表(但这里还有一个问题,每次返回的游标可能列都不相同,建立临时表就显得

    oracle数据库经典题目

    数据库表空间分为系统表空间和非系统表空间两类,其中非系统表空间包括撤销表空间、临时表空间和用户表空间等。 SYSTEM表空间主要用于存储数据库的数据字典、PL/SQL程序的源代码和解释代码、数据库对象的定义。撤销...

    Oracle Database 11g初学者指南--详细书签版

    1.2.5 默认的临时表空间 5 1.2.6 Undo表空间 5 1.2.7 服务器参数文件 5 1.2.8 后台进程 5 1.2.9 数据库管理员 7 1.3 Oracle Database 11g的基本数据类型 8 1.3.1 varchar2 8 1.3.2 数字 9 1.3.3 日期 9 ...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    1.2.5 默认的临时表空间 1.2.6 Undo表空间 1.2.7 服务器参数文件 1.2.8 后台进程 1.2.9 数据库管理员 1.3 Oracle Database 11g的基本数据类型 1.3.1 varchar2 1.3.2 数字 1.3.3 日期 1.3.4 时间戳 1.3.5 clob 1.3.6 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    Oracle事例

    手工刷新快照,(调用DBMS_SNAPSHOT包中的refresh过程)DBMS_SNAPSHOT.refresh(snapshot_name,refresh_type); begin DBMS_SNAPSHOT.REFRESH(\'snap_to_html\',\'c\'); end; 对所有快照进行刷新 begin DBMS_...

    ORACLE之常用FAQ V1.0(整理)

    [Q]怎样创建临时表 6 [Q]怎么样在PL/SQL中执行DDL语句 6 [Q]怎么样获取IP地址 7 [Q]怎么样加密存储过程 7 [Q] 7 [Q] 7 [Q]如果存在就更新,不存在就插入可以用一个语句实现吗 8 [Q]怎么实现左联,右联与外联 9 [Q]...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    PL/SQL 基础.doc

    3) 良好的可维护性(编译通过后存储在数据库里); 4) 提升系统性能; 缺点 1) 不便于向异构数据库移植应用程序(只能用于Oracle); 5. SQL与PL/SQL的区别 SQL:1) 第四代语言(智能语言); 2) 做什么,不管怎么做...

    Oracle从入门到精通

    1、表(TABLE)基本的存储单位,由行和列组成。.............. 2、方案:一个用户所有对象的命名集合。..................... 3、CTAS(子查询建表):................................... 4、截取:.................

    xls转mdb代码以及.exe执行软件

    --首先将excel表内容导入到一个全局临时表 select @tbname='[##temp'+cast(newid() as varchar(40))+']' ,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) into '+@tbname+' from ...

    mysql数据库的基本操作语法

    视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据。 视图的作用、优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 创建、修改视图 create or...

    收获不止SQL优化

    7.3.2 全局临时表案例 190 7.3.3 监控异常的表设计 195 7.3.4 表设计优化相关案例总结 199 7.4 本章习题、总结与延伸 199 第8章 且慢,学习索引如何让SQL飞 200 8.1 索引知识要点概述 201 8.1.1 索引结构的...

Global site tag (gtag.js) - Google Analytics