ibatis存储过程中,Oracle VARRAY自定义数据类型做IN参数的处理。

(1)在oracle中有如下自定义数据类型。
create or replace type IdArray as VARRAY(255) of NUMBER;  
(2)同时定义了一个存储过程/包。
CREATE OR REPLACE PACKAGE pkg_auth IS   
PROCEDURE UserAdd(v_loginName IN VARCHAR2,
v_types IN IdArray,
errcode OUT VARCHAR2,
errmsg OUT VARCHAR2);
END pkg_auth;
(3)在pl/sql中进行测试时,使用如下的sql语句
DECLARE
v_idarray IDARRAY:= IDARRAY( 1,2,3 );
BEGIN
pkg_auth.UserAdd(v_loginName => 'xxx'
v_types => v_idArray,
...............);
END;
]]>
(4)因此,在ibatis中做如下配置。
<procedure id="save" parameterClass="map">   
<![CDATA[
DECLARE
]]>
<dynamic>
<isNotEmpty property="types">
<iterate open="v_idArray IDARRAY := IDARRAY(" close=");" property="types" conjunction=",">
<![CDATA[#types[].id#]]>
</iterate>
</isNotEmpty>
<isEmpty property="types">
<![CDATA[v_idarray IDARRAY:= IDARRAY( );]]>
</isEmpty>
</dynamic>
<![CDATA[
BEGIN
pkg_auth.UserAdd(v_loginName => #loginName,jdbcType=VARCHAR,mode=IN#,
v_types => v_idArray,
errcode => #errCode,jdbcType=INTEGER,mode=OUT#,
errmsg => #errMsg,jdbcType=VARCHAR,mode=OUT#);
END;
]]>
</procedure>



-------------------------------------------------
类似的方法也可以用来处理其它Oracle的自定义数据类型,比如
create or replace type Item   
AS
object (
ID VARCHAR2(50),
money NUMBER
);
/
create or replace type ItemArray as varray(255) of Item;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值