从 PL/SQL 块中的 CASE 语句调用 Procs:面临的问题
Posted
技术标签:
【中文标题】从 PL/SQL 块中的 CASE 语句调用 Procs:面临的问题【英文标题】:Calling Procs from CASE statement in PL/SQL Block : issue faced 【发布时间】:2018-04-14 15:30:32 【问题描述】:我创建了以下块,要求用户选择选项。 然后每个选项调用存储过程来处理接收到的信息(无论是显示余额还是存款,为特定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 编译错误
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 是 SQL*Plus 命令,而不是 PL/SQL 命令。 【参考方案1】:你需要删除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 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;
/
【讨论】:
非常感谢 lad2025。 @ChinmayDeshpande How does accepting an answer work?以上是关于从 PL/SQL 块中的 CASE 语句调用 Procs:面临的问题的主要内容,如果未能解决你的问题,请参考以下文章
我可以在调用同一过程后将 PL/SQL 过程放在匿名块中吗?