Simple PL/SQL Package Procedure call. Error: Expect one of the following := . ( @ % ;

Simple PL/SQL Package Procedure call. Error: Expect one of the following := . ( @ % ;

使用 TOAD for Oracle,我能够成功执行这个接受单个日期参数的包过程。

EXEC COMMERCIAL_PURGE.PERFORM_PURGE (date'2010-04-10');

但是如果我用 BEGIN/END 块

包围它,我将无法执行相同的语句
BEGIN
    EXEC COMMERCIAL_PURGE.PERFORM_PURGE (date'2010-04-10');
END;
/

我已经十多年没有编写 PL-SQL 代码了,即便如此我也没有做那么多。我想做的是:

DECLARE
    v_CUTOFF_DT DATE;

    BEGIN

    --SET SERVEROUTPUT ON;

    SELECT FIN_IT_RPT.COMMERCIAL_PURGE.GET_PURGE_CUT_OFF_DT INTO v_CUTOFF_DT FROM DUAL;
    DBMS_OUTPUT.PUT_LINE ('The v_CUTOFF_DT=' || v_CUTOFF_DT);

    EXEC FIN_IT_RPT.COMMERCIAL_PURGE.PERFORM_PURGE (v_CUTOFF_DT);

    END;
    / 

我的理解是声明的变量属于 BEGIN END 块之外。

我得到的错误是这样的:

ORA-06550: line 11, column 6:
PLS-00103: Encountered the symbol "FIN_IT_RPT" when expecting one of the following:

   := . ( @ % ;
The symbol ":=" was substituted for "FIN_IT_RPT" to continue.

我需要做什么才能成功地将日期变量传递到 PERFORM_PURGE 过程中?

您不能在 Begin END 块内使用 EXEC。

从开始结束块中删除 EXEC。到时候应该没问题。