即使条件永远不成立,也会执行IF ELSE条件

时间:2017-06-10 12:44:46

标签: oracle if-statement plsql conditional-statements sqlplus

这是一个简单的sql语句,用于根据输入的选项打印2个不同的问题。我注意到即使else或if条件不正确,两个语句都会运行。打印的输出是正确的,但如果语句不正确,我不需要替换变量来提示用户输入。

SET SERVEROUTPUT ON;

DECLARE 
    choice number(2) := '&Please_Enter_Choice';
    question varchar2(50);
BEGIN
    if choice = 1 then
        question := '&Whats_your_name?';
    else
        if choice = 2 then
          question := '&How_old_are_you?';
        end if;
    end if;

    DBMS_OUTPUT.PUT_LINE(question);
END;

1 个答案:

答案 0 :(得分:6)

&Please_Enter_Choice这样的替换变量在预处理步骤中被替换,该步骤在运行实际代码之前(在服务器上)使用p!ace(在客户端上)。还请记住,对这些变量的支持是前端工具的一个特性(例如sql * plus),而数据库甚至不知道它们曾经存在过。结论:你不能制作那样的交互式PL / SQL脚本。