`
qinya06
  • 浏览: 584412 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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;   
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics