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

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:23   2585   0

匿名用户

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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP