如何解决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>
{
"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 举报,一经查实,本站将立刻删除。