我偶尔会做类似......
IF very-likely-condition THEN
NULL;
ELSE
<<code to deal with the unlikely condition>>
END IF;
在NULL行上的PL / SQL编译器发出 PLW-06002无法访问代码警告,提示IF。
现在虽然我可以清楚地忽略警告和/或重构IF语句为NOT,但我认为这样做更好。
所有人都知道是否有另一种插入空语句的方法,这样我就不会收到编译器警告?
修改
我不是说我经常这样做......实际上我很少这样做。但偶尔我认为这样做会更好。
编辑2:
此外还有其他可能有效的情况(例如忽略EXCEPTION块中的特定错误)。我只用IF作为一个简单的例子来说明这一点。
答案 0 :(得分:4)
递归和博客:
以下陈述 NOT 等效:
IF :x = 0 THEN
NULL;
ELSE
do_something;
END IF;
和
IF NOT :x = 0 THEN
do_something;
END IF;
如果:x
为空,do_something
程序将仅在第一种情况下称为 。这是因为表达式NULL = 0
在Oracle中既不是TRUE也不是FALSE,它是“未知的”。
重写第一个语句的正确方法是:
IF :x != 0 OR :x IS NULL THEN
do_something;
END IF;
我可以看到为什么在某些情况下我们可以把事情写成OP。
答案 1 :(得分:3)
看起来这是设计的。见http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/controlstructures.htm#i5421
示例4-23创建子程序时使用NULL作为占位符
CREATE PROCEDURE ... AS
BEGIN
NULL; -- use NULL as placeholder, raises "unreachable code" if warnings enabled
END;
/
答案 2 :(得分:0)
为什么你的声明空洞?那是代码味道。人们普遍认为,使用空if
块, 更容易阅读。
将if
条件更改为与当前条件相反的条件:
IF NOT very-likely-condition THEN
<<code to deal with the unlikely condition>>
END IF;
如果在条件为真时需要执行某些操作,则可以始终将该块重新添加。空块将条件与条件为真时执行的块分开。它看起来像你以前在if
部分中有代码,然后将其删除但却懒得重写if
条件以删除空语句。
主观上,如果我正在阅读你的代码并看到空if
块,我认为你不知道你在做什么。