问题描述
您好,我正在尝试在 Oracle 中调用一个返回 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;
我试图从骡子打电话的方式如下
{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,: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>
解决方法
输出类型应该是“CURSOR”而不是“TABLE”
<db:output-parameter key="ll_ret_table_out" customType="CURSOR" />
此外,我不确定 SP 调用是否仅使用 3 个参数。您是否在外部 SQL 客户端上尝试过?
您可能还想了解 Oracle UDT。
,可以按照这篇文章修复它