Mulesoft 4.0将UDT参数传递给存储过程

问题描述

全部

我需要传递给Mulesoft中的存储过程。 Oracle存储过程的定义如下:

  procedure update_snapsheet_task(P_ASSIGNMENT_ID     IN number,P_ASSIGNMENT_STATUS IN varchar2 default null,P_REFERRAL_ID       IN number,P_DOCUMENT_ARRAY    IN p_document_arr,P_USER_ID           IN varchar2,P_ERROR_STATUS      OUT varchar2);

其中p_document_arr是需要在Mulesoft中传递的UDT参数

p_document_arr在oracle中定义为:

Type p_documentid_arr IS RECORD(
   document_key   VARCHAR2(4000),document_id    NUMBER(10),DOWNLOAD_COUNT NUMBER default 0);
Type p_document_arr is table of p_documentid_arr index by binary_integer;

如何在Mulesoft 4.0的P_DOCUMENT_ARRAY中传递某些内容

我尝试了以下链接https://help.mulesoft.com/s/article/How-to-pass-an-array-of-objects-to-a-stored-procedure-in-mule-4

基本上,该链接建议使用

%dw 2.0
output application/java
fun documentContents(documentRecord) = (
    Db::createStruct("Database_Config","P_DOCUMENTID_ARR",[
                    documentRecord.document_key,documentRecord.document_id,documentRecord.download_count ])
)
fun documentContentTab(documentArray) = (
    documentArray map ((item,index) ->
        documentContents(item)
    )
)
---   
{
    "p_assignment_id": vars.inputPayload.assignment_id,"p_assignment_status": vars.inputPayload.assignment_status,"p_referral_id": vars.inputPayload.referral_id,"p_document_array": Db::createArray("Database_Config","P_DOCUMENT_ARR",documentContentTab(vars.inputPayload.documents default [])),"p_user_id": vars.inputPayload.user_id
}

对于存储过程调用

sql Query : { CALL cpm.cpm_notification_services.update_snapsheet_task(:p_assignment_id,:p_assignment_status,:p_referral_id,:p_document_array,:p_user_id,:p_error_type) }

此外,在全局配置中,我输入:

    <db:config name="Database_Config" doc:name="Database Config"
    doc:id="22ad9e72-3df1-4d21-bf8a-407d0c97e491">
    <db:data-source-connection dataSourceRef="oraclePoolDataSource" >
        <db:column-types >
            <db:column-type id="-10" typeName="CURSOR" className="oracle.jdbc.OracleTypes" />
            <db:column-type id="2003" typeName="P_DOCUMENT_ARR" />
            <db:column-type id="2002" typeName="P_DOCUMENTID_ARR" />
        </db:column-types>
    </db:data-source-connection>
</db:config>

但是没有用。 Mulesoft输出错误

{
  "status": "Server Error","message": "\"Exception while executing createStruct(\"Database_Config\",\"P_DOCUMENTID_ARR\",[\"abcdes123\",1,0]) cause: An error occurred when trying to create JDBC Structure. Fail to construct descriptor: Unable to resolve type \"P_DOCUMENTID_ARR\" \nTrace:\n  at callFunction (UnkNown)\n  at createStruct (line: -1,column: -1)\n  at documentContents (line: 4,column: 1)\n  at main (line: 11,column: 1),while writing Java.\nTrace:\n  at callFunction (UnkNown)\n  at createArray (line: -1,column: -1)\n  at main (line: 19,column: 21)\" evaluating expression:...
...

或从控制台日志中:

Message               : "Exception while executing 

createStruct("Database_Config",["abcdes123",0]) cause: An error occurred when trying to create JDBC Structure. Fail to construct descriptor: Unable to resolve type "P_DOCUMENTID_ARR" 
Trace:
  at callFunction (UnkNown)
  at createStruct (line: -1,column: -1)
  at documentContents (line: 4,column: 1)
  at main (line: 11,while writing Java.
Trace:
  at callFunction (UnkNown)
  at createArray (line: -1,column: -1)
  at main (line: 19,column: 21)" evaluating expression: "%dw 2.0
output application/java
fun documentContents(documentRecord) = (
Db::createStruct("Database_Config",[
    documentRecord.document_key,documentRecord.download_count ])
)
fun documentContentTab(documentArray) = (
documentArray map ((item,index) ->
documentContents(item)
)
)
---
{
"p_assignment_id": vars.inputPayload.assignment_id,"p_user_id": vars.inputPayload.user_id
}".

请帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)