gpt4 book ai didi

oracle - 在 Oracle Forms 中评估 PL/SQL boolean 变量

转载 作者:行者123 更新时间:2023-12-04 00:18:29 25 4
gpt4 key购买 nike

假设我有一个 BOOLEAN Oracle 表单中 PL/SQL 块中的变量:

DECLARE
is_viewable BOOLEAN;
BEGIN
is_viewable := ...;

IF NOT is_viewable THEN
raise_my_error(); // pseudo-code
END IF;
END;

用调试器单步执行此代码几次后,我确定 raise_my_error() 从不 被调用。澄清:
  • raise_my_error() 不是 如果 is_viewable = TRUE 被调用
  • raise_my_error() 不是 如果 is_viewable = FALSE 被调用

  • 初步测试表明,这种行为仅限于在 Oracle Forms 中运行的 PL/SQL 代码,而不是直接在数据库中运行的 PL/SQL 代码(尽管我可能是错的)。

    我可以通过明确比较 is_viewable 来解决这个问题至 FALSE :
    IF is_viewable = FALSE THEN
    raise_my_error();
    END IF;

    我还是很好奇为什么 NOT is_viewable从不评估为 TRUE .

    更新:看来我的调试器没有显示正确的值,这个问题不再有效。对这种困惑感到抱歉。

    最佳答案

    我们可以在 SQLPlus 中对此进行测试,以查看在 3 种情况(真、假、空)中的每一种情况下会发生什么:

    set serveroutput on

    declare
    true_value boolean := true;
    false_value boolean := false;
    null_value boolean;
    begin

    if not true_value then --Should not pass
    dbms_output.put_line('True Value');
    end if;

    if not false_value then --Should pass
    dbms_output.put_line('False Value');
    end if;

    if null_value is null then --Just to make sure it is null
    dbms_output.put_line('Null Value is Null');
    end if;

    if not null_value then --Should not pass
    dbms_output.put_line('Null Value');
    end if;
    end;
    /

    其中产生:
    SQL> set serveroutput on
    SQL>
    SQL> declare
    2 true_value boolean := true;
    3 false_value boolean := false;
    4 null_value boolean;
    5 begin
    6
    7 if not true_value then --Should not pass
    8 dbms_output.put_line('True Value');
    9 end if;
    10
    11 if not false_value then --Should pass
    12 dbms_output.put_line('False Value');
    13 end if;
    14
    15 if null_value is null then --Just to make sure it is null
    16 dbms_output.put_line('Null Value is Null');
    17 end if;
    18
    19 if not null_value then --Should not pass
    20 dbms_output.put_line('Null Value');
    21 end if;
    22 end;
    23 /
    False Value
    Null Value is Null

    PL/SQL procedure successfully completed.

    SQL>

    因此,可以产生预期输出的唯一可能代码路径是进入条件的值是否为假。如果这不是您所看到或期望的,那么您的程序中一定发生了其他事情或作为副作用。

    关于oracle - 在 Oracle Forms 中评估 PL/SQL boolean 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876669/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com