Oracle 从PL/SQL块中的CASE语句调用过程:面临问题

Oracle 从PL/SQL块中的CASE语句调用过程:面临问题,oracle,plsql,case,block,procedure,Oracle,Plsql,Case,Block,Procedure,我创建了下面的块,询问用户选择选项。 然后,每个选项都调用存储过程来处理接收到的信息(无论是要显示的余额还是要针对特定id进行的存款、取款) `set serveroutput on DECLARE V_CHOICE NUMBER(1) := &V_CHOICE; ID NUMBER(5) := &ID; AMT NUMBER(20) := &AMT; BEGIN CASE V_CHOICE WHEN 1 THEN E

我创建了下面的块,询问用户选择选项。 然后,每个选项都调用存储过程来处理接收到的信息(无论是要显示的余额还是要针对特定id进行的存款、取款)

`set serveroutput on
DECLARE
  V_CHOICE NUMBER(1)  := &V_CHOICE;
  ID       NUMBER(5)  := &ID;
  AMT      NUMBER(20) := &AMT;
BEGIN
  CASE V_CHOICE
  WHEN 1 THEN
    EXEC SHOW_BALANCE(ID);
  WHEN 2 THEN
    EXEC DEPOSITS (ID ,AMT);
  WHEN 3 THEN
    EXEC WITHDRAWAL (ID, AMT);
  ELSE
    DBMS_OUTPUT.PUT_LINE ('Invalid choice');
  END CASE;
END;
/`
这些过程中的每一个都可以通过传递各自的参数来单独执行,但是,在使用case语句时,我得到了PL/SQL编译错误

`set serveroutput on
DECLARE
  V_CHOICE NUMBER(1)  := &V_CHOICE;
  ID       NUMBER(5)  := &ID;
  AMT      NUMBER(20) := &AMT;
BEGIN
  CASE V_CHOICE
  WHEN 1 THEN
    EXEC SHOW_BALANCE(ID);
  WHEN 2 THEN
    EXEC DEPOSITS (ID ,AMT);
  WHEN 3 THEN
    EXEC WITHDRAWAL (ID, AMT);
  ELSE
    DBMS_OUTPUT.PUT_LINE ('Invalid choice');
  END CASE;
END;
/`
 Error report:
ORA-06550: line 8, column 6:
PLS-00103: Encountered the symbol "SHOW_BALANCE" when expecting one of the following:

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

请告知PL/SQL块有什么问题。

您需要删除
EXEC

`set serveroutput on
DECLARE
  V_CHOICE NUMBER(1)  := &V_CHOICE;
  ID       NUMBER(5)  := &ID;
  AMT      NUMBER(20) := &AMT;
BEGIN
  CASE V_CHOICE
  WHEN 1 THEN
    EXEC SHOW_BALANCE(ID);
  WHEN 2 THEN
    EXEC DEPOSITS (ID ,AMT);
  WHEN 3 THEN
    EXEC WITHDRAWAL (ID, AMT);
  ELSE
    DBMS_OUTPUT.PUT_LINE ('Invalid choice');
  END CASE;
END;
/`
set serveroutput on;
DECLARE
  V_CHOICE NUMBER(1)  := &V_CHOICE;
  ID       NUMBER(5)  := &ID;
  AMT      NUMBER(20) := &AMT;
BEGIN
  CASE V_CHOICE
  WHEN 1 THEN        SHOW_BALANCE(ID);
  WHEN 2 THEN        DEPOSITS(ID ,AMT);
  WHEN 3 THEN        WITHDRAWAL(ID, AMT);
  ELSE               DBMS_OUTPUT.PUT_LINE('Invalid choice');
  END CASE;
END;
/

EXEC是一个SQL*Plus命令,不是PL/SQL命令。非常感谢。@ChinmayDeshpande