`

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();
		}
	}

}
分享到:
评论

相关推荐

    用java调用oracle存储过程总结

    2. 创建一个临时表,让存储过程将结果写入临时表,然后在Java中通过查询临时表获取数据。 3. 如果可能,修改存储过程,使其返回XML或JSON格式的数据,然后在Java中解析这些格式的数据。 总的来说,调用Oracle存储...

    Oracel储存过程用临时表

    在存储过程中填充临时表,然后通过游标(Cursor)将临时表的数据逐条取出,传递给调用者。 3. **并发控制**:由于每个会话都有独立的临时表空间,多个并发调用同一个存储过程时,它们之间的临时表数据不会相互干扰...

    oracle存储过程使用文档

    ### Oracle存储过程使用知识点 #### 一、存储过程概述 - **定义**:存储过程(Stored Procedure)是在数据库中预编译的一组SQL语句集合,它可以被当作一个单独的对象来调用,只需要指定存储过程的名字及参数(如果...

    oracle 存储过程的基本语法

    Oracle存储过程是一种预编译的SQL脚本集合,它可以包含复杂的控制流逻辑、数据处理操作等,并且能够被其他应用程序或用户通过简单的调用来执行。使用存储过程可以提高数据库应用的性能和安全性,同时简化应用程序...

    Oracle 存储过程分页

    Oracle 存储过程是数据库管理中的一个重要组成部分,它允许开发者编写复杂的SQL和PL/SQL代码,然后在数据库中以函数或程序的形式存储和调用。在处理大量数据时,分页查询是必不可少的,它可以有效地减少网络传输的...

    oracle存储过程

    在Oracle中,存储过程不仅包括过程,还包括函数、触发器和游标,这些是数据库编程的核心元素,用于实现业务逻辑和数据操作的自动化。 1. **存储过程**: 存储过程是一组为了完成特定功能的SQL语句集,存储在数据库...

    pkg_XXX.rar_oracle_oracle record cursor

    在Oracle数据库系统中,"pkg_XXX.rar_oracle_oracle record cursor" 提供了一个学习和参考的案例,涉及到了存储过程、游标(cursor)、记录(record)以及动态SQL和临时表的使用。这些概念是Oracle数据库编程的核心...

    Oracle存储过程开发规范与技巧

    - **变量命名**:变量以`v_`开头,游标以`c_`开头,内存表以`m_`开头,临时表以`t_`开头。 - **存储过程命名**:明确表示其功能,区分全量和增量操作。 5. **技术细节**: - **游标定义**:游标可以在BEGIN之前...

    Oracle经典语法的调用

    为了实现高效的分页查询,可以使用存储过程结合游标或临时表。 示例: ```sql CREATE OR REPLACE PROCEDURE get_paged_data ( page_number IN NUMBER, page_size IN NUMBER, data_out OUT SYS_REFCURSOR ) AS ...

    oracle 存储过程(2)

    Oracle 存储过程是数据库管理中的重要组成部分,它是一组为了完成特定功能的SQL语句集,被编译后存储在数据库中,可以被多次调用。存储过程的使用极大地提高了数据库操作的效率,减少了网络通信量,并且有助于提高...

    Oracle All 添加 修改 更新 Oracle分页 emp表 存储过程实现

    -- 处理每一行数据,如打印或存储到临时表 DBMS_OUTPUT.PUT_LINE(rec.column1 || ', ' || rec.column2); END LOOP; END get_emp_paged; ``` 4. **调用存储过程**: 调用存储过程时,传入页码和每页大小。 ``...

    比较完整的一个创建Oracle存储过程的例子

    Oracle 存储过程是数据库中的一个重要组成部分,它允许开发者编写包含一系列数据库操作的自定义函数,这些操作可以是一次性执行或按需调用。在Oracle中,存储过程可以接收输入参数、输出参数,甚至两者都有,并且...

    超详细Oracle存储过程使用手册,只收1分

    调用存储过程通常通过`EXECUTE`语句完成,如下所示: ```sql DECLARE result VARCHAR2(100); BEGIN EXEC my_proc(5, result); DBMS_OUTPUT.PUT_LINE('Result: ' || result); END; / ``` 这里的`DECLARE`部分用于...

    oracle存储过程1.ppt

    Oracle存储过程是数据库管理系统Oracle中的一种重要特性,它允许开发者编写和存储一组SQL语句和PL/SQL块,以便在需要时重复使用。存储过程在数据库中预先编译并优化,提高了执行效率,降低了网络通信量,提升了系统...

    oracle-存储过程1.ppt

    - **谨慎使用临时存储过程**:过多的临时存储过程可能增加temp表的使用,影响性能。 - **不要直接修改syscomments**:系统表的直接修改可能导致不可预测的问题,应通过正规的DDL语句操作。 通过理解和熟练使用...

    在BIRT(百灵报表)中使用存储过程创建数据源

    5. 如果存储过程返回游标,需要设置游标处理,BIRT会自动处理返回的结果集。 6. 完成后,可以在数据集查询编辑器中预览和测试存储过程的执行结果。 在BIRT中使用存储过程的场景包括但不限于: - 调用返回单结果集...

    存储过程的返回结果集有2中类型

    本篇将详细讨论存储过程返回结果集的两种类型:调用者(to caller)和客户应用(to client)。 首先,让我们理解这两种返回结果集类型的差异: 1. **调用者(to caller)**: 当存储过程的结果集返回给调用者时,...

Global site tag (gtag.js) - Google Analytics