Oracle nvl、nvl2 nullif、解码、案例函数详解

1, NVL函数

,,,, NVL (expr1 expr2),如果expr1为空,则返回expr2;


2, NVL2函数

,,,, NVL2 (expr1, expr2 expr3),如果expr1为空,则返回expr3,否则返回expr2;


3, NULLIF函数

,,,, NULLIF (expr1 expr2),如果expr1=expr2返回空,否则返回expr1,要求两个表达式数据类型一致。


,,,,完成;(9)插入t1值;

说明1:NVL和NVL2函数在进行空值判断的时候,都会将函数内的表达式执行一次。


4,解码函数:

,,,,,是甲骨文数据库独家提供的函数功能,不是sql标准,

,,,,,相当于程序语言中其他的如果1=1 1 1 !=1的执行效果;

,,,,,

,,,,,,,,,,,,

,,,,,,,,,,,,

<强>

,,,,完成;创建表t1 (int);——创建t1临时表

,,,,完成;(9)插入t1值;

,,,,完成;(9)插入t1值;——插入3行数据,数据值都是9

,,,,完成;创建或替换函数sleep_now返回数量是

,,,,,2,我号码;

,,,,,3,开始

,,,,,4,我:=0;

,,,,,5,while8

,,,,,6,i<=1000000

,,,,,7,循环

,,,,,8,我:=i + 1;

,,,,,9,结束循环;

,,,,, 10,返回我。

,,,,, 11,,

,,,,, 12,/,,,,,,,,,,,,——创建一个sleep_now函数,目的是为了加长sql执行的时间

,,,,完成;设置时间,,,,,,,,,,,,,,设置sqlplus命令执行时间

,,,,完成;选择,nvl(我sleep_now())从t1;

,,,,,

,,,, nvl(我sleep_now ())

,,,, - - - - - - - - - - - - - - - - - -

,,,,,,,,,,,,,9

,,,,,,,,,,,,,9

,,,,,,,,,,,,,9

,,,,,

,,,,在0.343秒,执行——判断t1表中我的字段是否为空,为空则执行sleep_now()函数;

,,,, sql执行时间是0.343秒;

,,,,完成;选择,nvl2(我sleep_now(), 1)从t1;

,,,,,

,,,, nvl2(我sleep_now (), 1)

,,,, - - - - - - - - - - - - - - - - - - - - - - - -

,,,,,,,,,,,1000001

,,,,,,,,,,,1000001

,,,,,,,,,,,1000001

,,,,,

,,,,执行0.343 seconds ——同样使用nvl2函数进行测试


,,,,,使用解码进行相同测试,执行时间是0.063秒

,,,,完成;选择解码(我,null, sleep_now(), 1111)从t1;

,,,,,

,,,,解码(我,null, sleep_now(), 1111年

,,,, - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

,,,,,,,,,,,,,,,,,1111年

,,,,,,,,,,,,,,,,,1111年

,,,,,,,,,,,,,,,,,1111年

,,,,,

,,,,在0.063秒内执行

总结:错误的,不恰当的使用nvl函数,后患无穷!

Oracle nvl、nvl2 nullif、解码、案例函数详解