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;