在Informix存储过程中,我有一些条件如下: -
If val1 > 0 // 1st If
Select count(*) of value from a table and stored it in a Variable say VALUE
If VALUE > 0 // 2nd If
perform UPDATE
ELSE // Intended ELSE for 2nd IF
Perform Insert
END IF
ELSE // Intended ELSE for 1st IF
perform Operation X
END IF
我看到execution is always going in ELSE Intended for 1st IF
的一些方式,这对我来说是个问题。 SomeOne可以告诉我如何纠正这个或我在哪里
走错了。
此致
答案 0 :(得分:3)
显式关键字END IF表示SPL中IF语句的嵌套是明确的。翻译和缩进代码会产生:
IF val1 > 0 THEN
SELECT COUNT(*) INTO value FROM SomeTable;
If VALUE > 0 THEN
Perform UPDATE
ELSE
Perform INSERT
END IF
ELSE
Perform Operation X
END IF
没有办法存在任何含糊之处;由于明确的END IF符号,没有“悬空”的问题。
如果正在执行错误的代码,那么当其中一个比较为NULL时,您可能会遇到3值逻辑和比较行为。例如,如果val1
为NULL,则perform Operation X
将始终执行,因为val1 > 0
为NULL > 0
,其计算结果为NULL且不为TRUE,因此采用了ELSE子句,执行操作X.
noted作为ceinmart,您可以使用SET DEBUG FILE
和TRACE ON
来调试执行存储过程时发生的情况。
答案 1 :(得分:2)
在if。
之前加入命令set debug file to '/tmp/trace.out';
trace on ;
....
trace "Value of val1 ="||val1;
trace "Value of VALUE = "||VALUE;
运行该过程并检查数据库所在的SERVER上的/tmp/trace.out文件的输出。 要获得命令参考,请使用在线手册:TRACE,SET DEBUG FILE