如果在Informix里面的If存储过程

时间:2013-04-27 10:14:11

标签: informix

在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可以告诉我如何纠正这个或我在哪里 走错了。 此致

2 个答案:

答案 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 > 0NULL > 0,其计算结果为NULL且不为TRUE,因此采用了ELSE子句,执行操作X.

noted作为ceinmart,您可以使用SET DEBUG FILETRACE 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文件的输出。 要获得命令参考,请使用在线手册:TRACESET DEBUG FILE