(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;