Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PLS-00306:编号和类型正确的参数的编号或类型错误_Oracle_Debugging_Plsql_Procedure - Fatal编程技术网

Oracle PLS-00306:编号和类型正确的参数的编号或类型错误

Oracle PLS-00306:编号和类型正确的参数的编号或类型错误,oracle,debugging,plsql,procedure,Oracle,Debugging,Plsql,Procedure,类型和编号是匹配的,但仍有错误 有人知道为什么吗?不知道为什么要声明一个Varchar来保存日期。使用DATE变量保存日期,如下所示: 表: ORA-06550: line 11, column 3: PLS-00306: wrong number or types of arguments in call to 'REC_PURGE' ORA-06550: line 11, column 3: PL/SQL: Statement ignored 程序: CREATE TABLE st_dti

类型和编号是匹配的,但仍有错误


有人知道为什么吗?

不知道为什么要声明一个
Varchar
来保存日期。使用
DATE
变量保存日期,如下所示:

表:

ORA-06550: line 11, column 3:
PLS-00306: wrong number or types of arguments in call to 'REC_PURGE'
ORA-06550: line 11, column 3:
PL/SQL: Statement ignored
程序:

CREATE TABLE st_dti_mbr_stg
  ( col NUMBER,rec_lst_updt_dttm TIMESTAMP
  );

 SELECT * FROM st_dti_mbr_stg;

 INSERT INTO st_dti_mbr_stg  VALUES   (1,sysdate );
 INSERT INTO st_dti_mbr_stg  VALUES   (1,sysdate-60 );
创建或替换程序REC\u PURGE
(
VARCHAR2中的pInterfaceName,
pInterfaceRunDate在日期中,-VARCHAR2,--pInterfaceRunDate,
参数清理天数=>参数清理范围,-perrocd
);
PERRORCD:=PERRORCD;
结束;

第三个参数的名称是
PARAM\u CLEANUP\u DAYS
,但是在调用您编写的过程
PARAM\u CLEANUP\u RANGE
时。(错误消息有点误导,因为它不是不正确的参数的数量或类型。)很明显,您在收到错误和发布错误之间修改了代码。您发布的过程在您试图编译它时会抛出一个错误,远远早于您从另一个块调用它。这是因为在错误处理部分,您调用了一个从未定义过的变量,
pErrorMsg
。那么,我们怎么能认真对待你说的话呢?我投票结束这个问题,因为OP显然没有从他发布的代码中得到他报告的错误。无法认真对待。有一些重要信息需要隐藏,但与错误无关,我尝试删除它们,但仍然出现相同的错误。@Lodye您是否尝试了我在下面发布的内容。
ORA-06550: line 11, column 3:
PLS-00306: wrong number or types of arguments in call to 'REC_PURGE'
ORA-06550: line 11, column 3:
PL/SQL: Statement ignored
CREATE TABLE st_dti_mbr_stg
  ( col NUMBER,rec_lst_updt_dttm TIMESTAMP
  );

 SELECT * FROM st_dti_mbr_stg;

 INSERT INTO st_dti_mbr_stg  VALUES   (1,sysdate );
 INSERT INTO st_dti_mbr_stg  VALUES   (1,sysdate-60 );
create or replace PROCEDURE REC_PURGE
(
  pInterfaceName              IN    VARCHAR2,
  pInterfaceRunDate           IN    DATE,-- VARCHAR2,    --<-- Use Date variable
  PARAM_CLEANUP_DAYS          IN    NUMBER,
  pErrorCd                    OUT   NUMBER
)
AS

--************************************************************************************************************
--**                      DECLARE LOCAL VARIABLES                                                           **
--************************************************************************************************************/
  LV_CLEANUP_DAYS                     NUMBER        := 366; 
 -- LV_SP_RUN_DT                        VARCHAR2(19)  := pInterfaceRunDate; 
  LV_SP_RUN_DT                        DATE       := pInterfaceRunDate; 
  --lv_interdaceRunDate                 TIMESTAMP     := TO_DATE(pInterfaceRunDate,'MM/DD/YYYY');

BEGIN

IF PARAM_CLEANUP_DAYS IS NOT NULL 
THEN
  LV_CLEANUP_DAYS := PARAM_CLEANUP_DAYS;
END IF;

dbms_output.put_line(LV_SP_RUN_DT || '  '||LV_CLEANUP_DAYS);

DELETE /*+ PARALLEL(16) */
from ST_DTI_MBR_STG
where trunc(rec_lst_updt_dttm) <= LV_SP_RUN_DT - LV_CLEANUP_DAYS;

COMMIT;

EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        pErrorCd:= SQLCODE;
       -- pErrorMsg := 'Failure at step ';-- || TO_CHAR(lvCurrentStep, '99.90') || ' with the message: ' || SQLCODE || '-' || SQLERRM;

END REC_PURGE;
DECLARE
  PINTERFACENAME VARCHAR2(200);
  PINTERFACERUNDATE DATE ;--VARCHAR2(19);
  PARAM_CLEANUP_RANGE NUMBER;
  PERRORCD NUMBER;
BEGIN
  PINTERFACENAME :='REC';
  PINTERFACERUNDATE :=to_Date('03/18/2020','MM/DD/YYYY');
  PARAM_CLEANUP_RANGE := 30;

  REC_PURGE(
    pInterfaceName => PINTERFACENAME,
    pInterfaceRunDate => PINTERFACERUNDATE,
    PARAM_CLEANUP_DAYS => PARAM_CLEANUP_RANGE, --<- You messed up argument name
    pErrorCd => PERRORCD
  );
  PERRORCD := PERRORCD;
END;