精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-09
iBATIS 能不能调用 Oracle 的用户自定义类型呢,调的话怎么调??????
下面是我做的内容: 创建自定义类型 warrant.test_rshan_typ: create or replace type warrant.test_rshan_typ as object(id VARCHAR2(10),dat VARCHAR2(50)); 创建warrant.test_rshan_typ的数组: create or replace type warrant.test_rshan_typ_arr as table of warrant.test_rshan_typ; 创建调用 warrant.test_rshan_typ 类型的存储过程: create or replace procedure warrant.shan_test_array(arr in test_rshan_typ_arr,isSuccess out varchar2 ) as begin for r in 1..arr.count loop insert into test_rshan(id, dat) values(arr(r).id,arr(r).dat); if MOD(r,20)=0 then --for transaction control... commit; end if; end loop; commit; isSuccess:='success'; exception when others then rollback; isSuccess:='unsuccess'; end shan_test_array; iBATIS调用的部分代码: <parameterMap class="map" id="shanTestParameters"> <parameter property="arr" jdbcType="oracleARRAY" javaType="OBJECT" mode="IN"/> <parameter property="isSuccess" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/> </parameterMap> <procedure id="shanTest" parameterMap="shanTestParameters" > <![CDATA[ {call warrant.shan_test_array(?,?)}]]> </procedure> Java代码: public static void test() throws SQLException { Map map = new HashMap(); Object[][] vals = { { "aaa", "bbb" }, { "aaa1", "bbb1" }, { "aaa2", "bbb2" }, { "aaa3", "bbb3" }, { "aaa4", "bbb4" }, { "aaa5", "bbb5" } }; map.put("arr", vals); try { sqlMapper.startTransaction(); // 开启事务 sqlMapper.insert("shanTest", map); // 在调用存储过程的方法 sqlMapper.commitTransaction(); // 提交事务 } catch (SQLException e) { e.printStackTrace(); } finally { try { sqlMapper.endTransaction(); // 结束事务 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 报错:无效的列类型,请问arr怎么配才能行啊 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-09
我想问题是出在
<parameterMap class="map" id="shanTestParameters"> <parameter property="arr" jdbcType="oracleARRAY" javaType="OBJECT" mode="IN"/> <parameter property="isSuccess" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/> </parameterMap> 中的这句话: <parameter property="arr" jdbcType="oracleARRAY" javaType="OBJECT" mode="IN"/> 关键是这句话怎么写!!有可能是 jdbcType 定义有问题。 望各位不吝赐教!! |
|
返回顶楼 | |
发表时间:2007-05-09
根据ibatis SqlMap2中有描叙自定义类型的应用,和lz用的方式不一样,你改一改试试吧。
那你为什么一定要用自定义的类型呢?你这样的需求不要自定义很好实现呀。 |
|
返回顶楼 | |
发表时间:2007-05-09
公司业务传参很多,计划用自定义类型,我只是做个简单的例子试试。
|
|
返回顶楼 | |
发表时间:2007-05-09
hgq0011 写道 根据ibatis SqlMap2中有描叙自定义类型的应用,和lz用的方式不一样,你改一改试试吧。
那你为什么一定要用自定义的类型呢?你这样的需求不要自定义很好实现呀。 iBATIS的自定义类型好像是返回的数据类型,并不是oracle内部定义的类型。 |
|
返回顶楼 | |
发表时间:2007-05-09
你变型变的比指针还麻烦(说真的没看明白)
不过告诉我你是怎么想的,想要什么样子的东西? 如果你只是想要这个程序过去, 那么把你脑子里所有的动态语言语法全扔了好好的定义变量,再写程序。否则你写出来的就是一堆垃圾 |
|
返回顶楼 | |
发表时间:2007-05-09
需要自己定义一个ArrayTypeHandler
|
|
返回顶楼 | |
发表时间:2007-05-09
qing_pu 写道 公司业务传参很多,计划用自定义类型,我只是做个简单的例子试试。
你用自定义不也要申明数据类型呀, 那还不如按照IBAITS的一般做法。 |
|
返回顶楼 | |
发表时间:2007-05-09
抛出异常的爱 写道 你变型变的比指针还麻烦(说真的没看明白)
不过告诉我你是怎么想的,想要什么样子的东西? 如果你只是想要这个程序过去, 那么把你脑子里所有的动态语言语法全扔了好好的定义变量,再写程序。否则你写出来的就是一堆垃圾 如果说就要这个程序通过,那么应该调些或者再做些什么东西呢?? 还有就是有关变量类型的定义: 先定义了一个类型:warrant.test_rshan_typ ,包含了两个属性:id VARCHAR2(10),dat VARCHAR2(50) 然后定义了一个数组类型:warrant.test_rshan_typ_arr,它里面用来存放warrant.test_rshan_typ类型。 最后定义了存储过程:warrant.shan_test_array,接收传入的warrant.test_rshan_typ_arr数据,进行 test_rshan表的操作。以及返回操作结果。 |
|
返回顶楼 | |
发表时间:2007-05-09
dovecat 写道 需要自己定义一个ArrayTypeHandler
有这方面的思路,只不过具体的写法,能给个例子吗?? |
|
返回顶楼 | |