Heim >Datenbank >MySQL-Tutorial >Oracle PL/SQL 从if 到 then的“艺术鉴赏”

Oracle PL/SQL 从if 到 then的“艺术鉴赏”

WBOY
WBOYOriginal
2016-06-07 17:25:28900Durchsuche

在Oracle开发中,if和then之间的条件表达式,有很多行为充满ldquo;艺术rdquo;,需要我们去发现,去鉴赏。

在Oracle开发中,if和then之间的条件表达式,有很多行为充满“艺术”,需要我们去发现,去鉴赏。

欣赏一:三值逻辑

如果一个表达式中包含null值,那么表达式的最终结果会是什么呢?比如:2

例子:

IF salary>4000
THEN
  give_bonus(employee_id);
END IF;

布尔表达式中的null值,会导致整个表达式的结果也是null。也就是,salary为null,则salary>4000便为null。

有些操作符(IS NULL/IS NOT NULL)或者函数(nvl())被设计成专门处理null值,将结果控制成二值逻辑。

比如:

IF salary>4000 or salary IS NULL
THEN
  give_bonus(employee_id);
END IF;

这样子,那些薪水缺失的员工也能够得到额外的津贴了。

由此,对于每一个布尔表达式中的每一个变量,切记细致考虑如果变量是null所带来的后果。

欣赏二:短路行为

pl/sql使用短路求值方法,也就是说pl/sql不需要对一个if语句中的所有表达式都去求值。比如:当对下面这个IF语句中的表达式求值时,只要condition1的结果是false或者null,则pl/sql就会停止对整个表达式的求值,将控制权交给ELSE分支。

IF condition1 AND condition2
THEN
  ...
ELSE
  ...
END IF;

和AND类似,使用OR操作符,只要condition1为true,则pl/sql立马执行THEN分支。

如果一个条件的求值代价非常昂贵,,比如消耗大量的cpu和内存资源,这时短路行为就非常有用。如果遇到这种情况,一定要确保把这个代价昂贵的条件放在整个条件集的最后:

IF low_cpu_condition AND high_cpu_condition
THEN
  ...
ELSE
  ...
END IF;

欣赏三:布尔标志

通常,把布尔类型变量当做标志使用起来会更方便些。如果要这样做,记住是可以直接把一个布尔表达式赋值给一个布尔变量的。与其用代码:

相关阅读:Oracle PL/SQL 浅析IF和ELSIF的不平等 

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn