【问题标题】:IF ELSE condition executed even though condition is never trueIF ELSE 条件执行,即使条件从不为真
【发布时间】:2017-11-12 09:29:32
【问题描述】:

这是一个简单的 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;

【问题讨论】:

  • sqlplus 在代码块运行之前提示所有替换变量
  • 这里我并不想太刻薄,但是如果执行了一个 IF 语句,那么你已经做了一些事情让计算机认为它是真的。您需要弄清楚哪个步骤无意中将 TRUE 结果返回到您的 IF 语句。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多