If 语句中的多个条件为真Nefted If

问题描述

我有一个嵌套的 if 条件:

If (a > 0)
THEN 
  Delete from sample_table where id = 123;
   
    IF (b > 0)
       dummy = error_insert('x','y','The value of b is greater than 0',0);
     commit;
     Return;
     END IF;
END IF;

所以我想检查变量 a 是否大于 0,如果是,它应该从 sample_table 中删除该值,然后检查变量 b 的值是否大于 0 并插入提到的值。

但是它实际上做了什么,检查a是否大于0,直接去检查b是否大于0。它不执行delete语句。

解决方法

我没有看到完整的代码,所以我只能猜测。

代码没有按预期工作可能有两个原因。

首先也是最简单的,正如@littlefoot 提到的,没有要删除的行。

检查起来很容易,我相信您已经这样做了,但仍然想知道为什么数据库中仍然存在记录。所以这是第二个猜测。

其次,是代码中“commit”命令的位置。您拥有的程序仅在 a > 0 且 b > 0 时才会提交。因此,我的猜测是在您的测试用例中,“a”大于 0 且“b”不大于 0,并且无法到达提交命令。