oracle存储过程二维数组,java怎么从oracle存储过程接收对象数组与二维数组

匿名用户

1级

2014-11-10 回答

//如果你使用JDBC,

//你可以强转conn为oracleConnection也可以像我一样强转CallableStatement为OracleCallableStatement。

//但如果你使用诸如tomcat的DBCP等连接池请首先转换为native连接,然后转换为oracle连接,直接强转是无效的!

//(最后释放关闭的连接是连接池的连接而不是oracle的连接)

conn = DbHelperImpJdbc.getInstance().getConn();

cs = (OracleCallableStatement) conn.prepareCall("{call PKG_DEMO.GETBEAN_OBJTABLE(?)}");

cs.registerOutParameter(1, OracleTypes.ARRAY, "PERSON_TABLE_TYPE".toUpperCase());

ARRAY obj = (ARRAY) cs.getArray(1);

Datum[] datas = obj.getOracleArray();//获取对象

//遍历对象数组

for(int i=0;i

System.out.println("对象"+i);

//获取属性

Object[] beanAttributes = ((STRUCT) datas[i]).getOracleAttributes();

//遍历属性

for(int m=0;m

System.out.println(" "+beanAttributes[m]);

}

}

打印结果:

对象0

232311232321

第1代

201

2010-1-11

对象1

232311232322

第2代

202

2010-1-12

对象2

232311232323

第3代

203

2010-1-13

对象3

232311232324

第4代

204

2010-1-14

对象4

232311232325

第5代

205

2010-1-15

接下来我们来看看怎么从过程中接收二维数组,由于二维数组的接收网上资料很少,通过自己的研究发现二维数组可以先转换成一维数组,然后每个元素再逆向转换成Oracle.ARRAY,再然后按照一维数组如法炮制。

Sql代码

--建立一维数组

--PS也请使用NVARCHAR2

CREATE OR REPLACE TYPE TYPE_VARCHAR IS TABLE OF NVARCHAR2(2000)

--建立二维数组

CREATE OR REPLACE TYPE TYPE_VARCHAR_TABLE IS TABLE OF TYPE_VARCHAR

--建立测试用过程

PROCEDURE GETBEAN_ARRAYTABLE(V_TABLE OUT TYPE_VARCHAR_TABLE)

AS

BEGIN

V_TABLE:=TYPE_VARCHAR_TABLE();

FOR I IN 1 .. 5 LOOP

V_TABLE.EXTEND;

V_TABLE(I):=NEW TYPE_VARCHAR('23231123232'||I,

' 第'||I||'代',

'20'||I,

'2010-1-1'||I);

END LOOP;

END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值