1

在 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,这对我来说是个问题。有人可以让我知道我该如何纠正这个或我哪里出错了。问候

4

2 回答 2

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 > 0isNULL > 0的计算结果为 NULL,而不是 TRUE,因此采用 ELSE 子句并执行操作 X。

正如ceinmart所指出的,您可以使用和调试执行存储过程时发生的情况。SET DEBUG FILETRACE ON

于 2013-04-28T19:46:57.813 回答
2

在 if 之前包含以下命令。

set debug file to '/tmp/trace.out';
trace on ;
....
trace "Value of val1 ="||val1; 
trace "Value of VALUE = "||VALUE; 

运行该过程并检查数据库所在服务器上 /tmp/trace.out 文件的输出。要命令参考,请使用在线手册: TRACESET DEBUG FILE

于 2013-04-28T00:09:34.317 回答