create or replace PROCEDURE REC_PURGE
(
pInterfaceName IN VARCHAR2,
pInterfaceRunDate IN VARCHAR2, -- MM/DD/YYYY
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_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;
DELETE /*+ PARALLEL(16) */
from ST_DTI_MBR_STG
where rec_lst_updt_dttm <= trunc(TO_DATE(LV_SP_RUN_DT,'MM/DD/YYYY')-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;
这是我创建程序的代码,我像这样rxc:
DECLARE
PINTERFACENAME VARCHAR2(200);
PINTERFACERUNDATE VARCHAR2(19);
PARAM_CLEANUP_RANGE NUMBER;
PERRORCD NUMBER;
BEGIN
PINTERFACENAME :='REC';
PINTERFACERUNDATE := '03/18/2020';
PARAM_CLEANUP_RANGE := '366';
REC_PURGE(
PINTERFACENAME => PINTERFACENAME,
PINTERFACERUNDATE => PINTERFACERUNDATE,
PARAM_CLEANUP_RANGE => PARAM_CLEANUP_RANGE,
PERRORCD => PERRORCD
);
PERRORCD := PERRORCD;
END;
类型和数字匹配,但我仍然收到错误
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
有人知道为什么吗?
[不确定为什么要声明Varchar
保留日期。使用DATE
变量保存日期,如下所示:
表格:
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;