【发布时间】:2010-12-25 00:03:40
【问题描述】:
假设我在 Oracle 表单的 PL/SQL 块中有一个 BOOLEAN 变量:
DECLARE
is_viewable BOOLEAN;
BEGIN
is_viewable := ...;
IF NOT is_viewable THEN
raise_my_error(); // pseudo-code
END IF;
END;
在使用调试器多次单步执行此代码后,我确定raise_my_error() 从不 被调用。澄清一下:
-
如果
is_viewable = TRUE,raise_my_error()not 是否会被调用 -
如果
is_viewable = FALSEraise_my_error()not 会被调用
初步测试表明,这种行为仅限于在 Oracle Forms 中运行的 PL/SQL 代码,而不是直接在数据库中运行的 PL/SQL 代码(尽管我可能错了)。
我可以通过明确比较 is_viewable 和 FALSE 来解决这个问题:
IF is_viewable = FALSE THEN
raise_my_error();
END IF;
我仍然很好奇为什么 NOT is_viewable 永远不会评估为 TRUE。
更新:看来我的调试器没有显示正确的值,而且这个问题不再有效。很抱歉造成这种混乱。
【问题讨论】:
-
[友情提示] 作为有经验的用户,我猜你只是忘了接受一个答案(dcp's 或 Jeffrey's)。
-
@AlexanderMalakhov:我曾多次想接受答案,但现在代码似乎运行正确,这个问题似乎无法回答。除非我弄错了,否则两个答案都无法解释为什么
NOT is_viewable会总是评估为FALSE(无论is_viewable的值如何)而is_viewable = FALSE会评估为TRUE或@ 987654339@,取决于is_viewable的值。由于问题停止发生,我无法验证任何答案。 :( -
明白。我有类似的(w.r.t.“没有正确答案,无法验证”)question。由于其他人回答我的问题的可能性很小,因此我决定接受最有帮助的(而不是正确的)答案。所以要奖励这个人的时间和努力。对于我的 Q 没有悬在未答复的列表中。虽然要明确一点,但我对不遵循我的策略的人完全没有问题(更重要的是,因为你显然为 SO 社区做得很好)
标签: oracle plsql boolean oracleforms