如何从 Mule4 中的 Oracle 存储过程中获取 TABLE 类型 return 类型?

How to get TABLE Type return type from Oracle Stored procedure in Mule4?

您好,我正在尝试在 Oracle 中调用 return TABLE 类型的存储过程。这是我的包裹

create or replace PACKAGE        "PKG_LOGIC_SERVICE" AS

TYPE ll_ret_rec IS RECORD (
    ll_attribute      loan_logic.attribute%TYPE,
    ll_ret_value      loan_logic.ret_value%TYPE,
    ll_edit_type      loan_logic.edit_type%TYPE,
    ll_applic_type    loan_logic.application_type%TYPE,
    ll_rule_order     loan_logic.rule_order%TYPE,
    ll_db_field_name  loan_logic.db_field_name%TYPE,
    ll_xpath_name     loan_logic.xpath_name%TYPE,
    ll_loan_id        loans.loan_id%TYPE,
    ll_process_id     NUMBER(12)
);
TYPE ll_ret_table IS
    TABLE OF ll_ret_rec;
PROCEDURE pr_loan_logic_check (
    in_loan_id        IN   loans.loan_id%TYPE,
    in_trans_id       IN   NUMBER,
    as_errm           OUT  VARCHAR2,
   -- curr_cursor_out   IN OUT  SYS_REFCURSOR,
    ll_ret_table_out  OUT  PKG_LOGIC_SERVICE.ll_ret_table
);

PROCEDURE pr_insert_pricing_table (
    in_loan_id     IN   loans.loan_id%TYPE,
    ad_cur_seq_no  OUT  NUMBER,
    ad_retval      OUT  NUMBER,
    as_errm        OUT NOCOPY VARCHAR2
);

END PKG_LOGIC_SERVICE;

我尝试从 Mule 调用的方式如下所示

{call PKG_LOGIC_SERVICE.pr_loan_logic_check(776665544,987,:as_errm,:ll_ret_table_out)}

但是我收到一个错误

wrong number or types of arguments in call to 'pr_loan_logic_check'

我的XML SP部分是

<db:stored-procedure doc:name="Stored procedure" doc:id="ffc0e3aa-193a-4e86-91df-a52562e5acc4" 
config-ref="DB_CONFIG">
        <db:sql ><![CDATA[{call 
 PKG_LOGIC_SERVICE.pr_loan_logic_check(776665544,987,:as_errm,:ll_ret_table_out)}]]></db:sql>
        <db:output-parameters >
            <db:output-parameter key="ll_ret_table_out" customType="TABLE" />
            <db:output-parameter key="as_errm" type="VARCHAR" />
        </db:output-parameters>
    </db:stored-procedure>

我在做什么错误以及 mule 在调用过程时如何知道自定义类型 TABLE?

输出类型应该是“CURSOR”而不是“TABLE”

<db:output-parameter key="ll_ret_table_out" customType="CURSOR" />

此外,我不确定 SP 调用是否只使用 3 个参数。您是否在外部 SQL 客户端上尝试过?

您可能还想阅读有关 Oracle UDT 的内容。

可以按照这篇文章修复它

https://help.mulesoft.com/s/article/Calling-Oracle-Stored-Procedure-with-User-Defined-Types-UDT-as-IN-OUT-or-IN-OUT-Parameters-in-Mule-4-x