`
whiletrue
  • 浏览: 38718 次
  • 性别: Icon_minigender_1
  • 来自: 地球
社区版块
存档分类
最新评论

java调用oralc存储过程返回数组

阅读更多
数据库定义
CREATE TYPE t_arr AS OBJECT(
id NUMBER ,
name varchar2(20)
);

CREATE type t_arr_re as table of t_arr;


create or replace procedure test_array(v_cfjg out t_arr_re) is
begin
  DECLARE
    i         number;
    v_res_fun pub_res_function%rowTYPE;
    -- D_nr dic_cfjg%rowTYPE;
    cursor c_fun is
      SELECT * FROM pub_res_function f;
  BEGIN
    i      := 0;
    v_cfjg := t_arr_re(); --Êý×é³õʼ»¯
  
    open c_fun;
    LOOP
      fetch c_fun
        into v_res_fun;
      EXIT WHEN c_fun%NOTFOUND or i > 10;
      i := i + 1;
      v_cfjg.EXTEND;
      -- DBMS_OUTPUT.PUT_LINE(TO_CHAR(D_cfjg.dm));
      v_cfjg(v_cfjg.count) := t_arr(v_res_fun.func_id, v_res_fun.func_name);
    
      DBMS_OUTPUT.PUT(to_char(v_res_fun.func_name));
      dbms_output.new_line();
    
    END LOOP;
  end;
EXCEPTION
  WHEN TOO_MANY_ROWS THEN
    DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(sqlerrm);
end test_array;


java的调用

public void callPrTest() {
		Connection conn = null;
		ResultSet rs = null;
		CallableStatement stmt = null;
		try {
			conn = this.getConnection();
			stmt = null;
			String procName = new StringBuffer().append(
					"{ call test_array(?) } ").toString();
			stmt = conn.prepareCall(procName);
			// stmt.setObject(1, array, oracle.jdbc.OracleTypes.ARRAY);
			stmt.registerOutParameter(1, Types.ARRAY,"T_ARR_RE");
			stmt.execute();
			ARRAY arr = (ARRAY) stmt.getArray(1);
			rs = arr.getResultSet();
			while (rs.next()) {
				STRUCT struct = (STRUCT) rs.getObject(2);
				Object[] obs = struct.getAttributes();
				for (int i = 0; i < obs.length; i++) {
					System.out.println(obs[0] + " " + obs[0].getClass());
				}
				System.out.println("-------------------------");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			clear(rs, null, conn);
		}
	}

注意T_ARR_RE,习惯oralce的不分大小写,这里可能就会郁闷下.
这里是必须使用大写的,记下来提醒下!
2
0
分享到:
评论
1 楼 mixo44co2 2009-10-29  
LZ是中兴通讯的吧
我运行
ARRAY arr = (ARRAY) stmt.getArray(1); 
获取的arr为空,不知道问题在哪?

相关推荐

    oralc数据库学习

    在Oracle数据库的学习过程中,了解并熟练掌握如何在表上建立不同类型的约束是非常重要的一步。这不仅能够帮助我们更好地理解数据的完整性和一致性,还能够提高数据库应用的安全性和性能。下面将详细介绍Oracle数据库...

    oralc 数据库

    oralc数据库这本书主要从程序员的角度,也就是开发的角度,对各种数据库系统进行讲解。但数据库的知识并不是只有开发这一块,还包含数据库设计、性能调优及管理(DBA)方面的知识,本书对这部分知识涉及的不多,也不...

    关于oralc字符集环境变量的使用

    关于oralc字符集环境变量的使用

    oralc数据库学习笔记.docx

    此外,Oracle 提供了多种数据类型,如 `VARCHAR2` 用于存储可变长度的字符串,`NUMBER` 用于存储整数和小数,`DATE` 用于存储日期,`TIMESTAMP` 用于存储精确到秒的时间戳,以及 `BLOB` 用于存储二进制大对象如图片...

    oralc数据库学习笔记.pdf

    在Oracle数据库的学习过程中,用户管理和表的管理是两个基础且重要的概念。 一、Oracle的用户管理 Oracle提供了多级别的认证体系,包括OCAR(Oracle初级工程师认证)、OCP(Oracle认证专家)和OCM(Oracle大师认证...

    韩顺平_JAVA_视频教程_下载

    都是迅雷下载地址,一次复制,全集下载, 包含oracle,Java, 韩顺平.循序渐进学.java.从入门到精通 韩顺平.玩转oralc 韩顺平.linux视频教程 韩顺平.j2ee视频实战教程

    Oracle 手工创建数据库完整步骤

    Oracle 手工创建数据库是一个涉及多个步骤和技术细节的过程,它要求对Oracle数据库体系结构有深入的理解。以下将详细阐述这个过程: 1. **规划与准备**:首先,你需要明确数据库的目标,比如存储类型、大小、性能...

    韩顺平所有视频下载地址

    都是迅雷下载地址,一次复制,全集下载, 包含oracle,Java, 韩顺平.循序渐进学.java.从入门到精通 韩顺平.玩转oralc 韩顺平.linux视频教程 韩顺平.j2ee视频实战教程

    c#读取二进制文件c#读取二进制文件

    - `File.OpenRead(string filePath)`:打开现有文件并返回一个`FileStream`对象。 - `File.AppendText(string filePath)`:追加文本到现有文件。 - `File.Copy(string sourceFilePath, string destinationPath)`:...

    oracle分页查询

    在Oracle数据库中,分页查询通常涉及到`ROWNUM`伪列的使用,以限制返回的行数。下面将详细讨论Oracle分页查询的原理、方法以及性能分析。 首先,Oracle的分页查询语句通常有以下结构: ```sql SELECT * FROM ( ...

    日期查询脚本

    oracle中针对日期时间的查询,精确到年月日,时分秒的查询

    Oracle11goci.dll_itmop.com.zip

    Navicat Premiun 连接Oracle数据库报错 28547 connection to server failed, probable Oracle Net admin error 替换调 原本Navicat Premiun 工具&gt;环境&gt;ICO环境 下的oci.all

    PB9写入非中文数据库的乱码问题

    本文提供了一个解决方案,利用Windows API函数MultiByteToWideChar(),将中文字符转换为Unicode编码,再通过SQL语句存储到数据库,从而避免乱码的出现。 首先,我们需要理解乱码问题的根本原因。在非Unicode系统或...

    oracle分页源码

    同时,你可能需要处理一些边界条件,如当页码过大时返回空结果。 例如: ```java int pageSize = 10; int pageNum = 10; String sql = "SELECT * FROM (SELECT t.*, ROW_NUMBER() OVER (ORDER BY id) AS row_num ...

    ojdbc7.jar

    oralc 最新驱动,基于JDK7的驱动,看网上没有,去官网下了个共享下

    oracle常用函数

    oralc常有函数描述,主要是一些常用的函数描述,可以给大家带来方便.

Global site tag (gtag.js) - Google Analytics