Mule:调用Oracle存储过程,该过程返回自定义类型的表

时间:2015-08-14 14:07:17

标签: oracle stored-procedures mule

我正在使用Mule CE 3.6.1。我有以下数据库连接器配置调用Oracle存储过程。

<db:stored-procedure config-ref="Oracle_Configuration" doc:name="Database">
    <db:parameterized-query><![CDATA[call get_phone_email(:userId, :tPhoneRecord)]]></db:parameterized-query>
    <db:in-param name="userId" type="NUMERIC" value="#[payload]" />
    <db:out-param name="tPhoneRecord" type="ARRAY" />
</db:stored-procedure>

参数tPhoneRecord在存储过程中定义为IS TABLE OF phone_email%ROWTYPE(即记录表)。我已尝试指定参数类型ARRAY,但得到错误:

Message    : Invalid argument(s) in call (java.sql.SQLException). Message payload is of type Object[]
Code       : MULE_ERROR--2

我也尝试过使用其他out-param类型,或者没有成功指定类型。

请让我知道我应该为Oracle记录表使用什么样的外部类型,或者我应该用Java来代替。非常感谢提前。

1 个答案:

答案 0 :(得分:0)

您可以使用以下解决方案输出参数。

<db:oracle-config name="Oracle_Configuration" url="jdbc:oracle:thin:@54.175.245.218:1581:xe" user="user" password="4321" >
    </db:oracle-config>
    <db:data-type name="INtypename" id="12"/>
    <!-- VARCHAR id=12  -->
    <db:data-type name="OUTtypename" id="2002"/>
    <!-- STRUCT id=2002  -->
    </db:data-types>
    ...
    <db:stored-procedure config-ref="Generic_Database_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[CALL storedprocfnc(:INtypename,:OUTtypename);]]></db:parameterized-query>
            <db:in-param name="INtypename" value="#[payload]"/>
            <db:out-param name="OUTtypename" />
    </db:stored-procedure>