2017-06-10 22 views
1

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

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; 
+7

sqlplus提示所有的替换变量在代码块甚至运行之前 – thatjeffsmith

+0

我并不是想在这里过于暴躁,但是如果执行一条IF语句,那么你已经做了一些事情来让电脑认为它是真的。你需要弄清楚什么步骤会无意中将'TRUE'结果返回给你的IF语句。 – SandPiper

回答

6

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