在调用过程中获取错误的参数数量或类型

时间:2018-01-22 14:01:43

标签: plsql

我正在尝试使用以下代码调用程序并获取

  

wrong number or types of arguments in call to procedure

问题可能是记录类型作为参数传递,但我看不出任何问题。

    DECLARE
       p_status          VARCHAR2 (4) := 'S';
       p_id              NUMBER := 123456;
       p_py_id           NUMBER := 513;
       p_type            NUMBER := 1;
       p_date_time       DATE   := TO_DATE ('10/01/2018 23:50:42', 'DD/MM/YYYY HH24:MI:SS');
       p_os_pay          NUMBER := 0;
       p_ind             VARCHAR2 (2) := 'Y';
       p_confirm         VARCHAR2 (2) := 'Y';
       p_year            NUMBER := 2018;
       p_reason          VARCHAR2 (5) := NULL;
       p_currrpay        NUMBER := 1517;

       p_details        pkg.g_r_type;

    BEGIN
       p_details.pro_code := 'AB';
       p_details.inst_type := '1';
       p_details.pay_date := TO_DATE ('19/10/2016 00:00:00', 'DD/MM/YYYY HH24:MI:SS');
       p_details.pay_amt := 5000;
       p_details.h_code := 'ABCD';
       p_details.pay_ind := 'N';
       p_details.c_code := 123456;
       p_details.c_year := 8;


       pkg.procedure_info (          p_status,
                                     p_id,
                                     p_py_id,
                                     p_type,
                                     p_date_time,
                                     p_os_pay,
                                     p_ind,
                                     p_confirm,
                                     p_year,
                                     p_reason,
                                     p_details,
                                     p_currrpay
                         );
    EXCEPTION
       WHEN OTHERS
       THEN
          DBMS_OUTPUT.put_line (SQLERRM);
    END;
    /

以下是包装说明:

CREATE OR REPLACE package pkg
as
  type g_r_type is record (
    pro_code             varchar2 (2)
   ,inst_type           varchar2 (1)
   ,pay_date             date
   ,pay_amt           number (13, 2)
   ,h_code               varchar2 (4)
   ,pay_ind              varchar2 (1)
   ,c_code               number(6)
   ,c_year               number(2)
  );


  procedure procedure_info (
                            p_status             in   varchar2
                           ,p_id                 in   number
                           ,p_py_id              in   number
                           ,p_type               in   number
                           ,p_date_time          in   date
                           ,p_os_pay             in   number
                           ,p_ind                in   varchar2
                           ,p_confirm            in   varchar2
                           ,p_year               in   number
                           ,p_failure_reason     in   varchar2
                           ,p_details            in   g_r_type
                           ,p_currrpay           in       number  
  );
end pkg;
/

我已经交叉检查了数据类型,参数的长度和数量,但找不到问题。

1 个答案:

答案 0 :(得分:0)

确保您的软件包脚本以文本文件末尾的/结尾,作为该行的第一个字符(并且最后一个非空白)。

如果您的包已成功创建,您应该收到一条消息:

  

package created successfully

然后,如果你的包的 Body 是:

  

package body created successfully

确保在数据库中正确创建了包:

此查询应该有所帮助:

Select * from all_source where name='PKG';

对于身体:

Select * 
  from all_source 
 where name='PKG'
   and type='PACKAGE BODY';