如果ORACLE数据库,NVL是空值转换关键字,如果bpm.taskcategory为空就返回 ['执行.单位.流程.'||:TASKINIT]这样的值。
DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.其具体的语法格式如下: DECODE(input_value,value,result[,value,result…][,default_result]);其中:input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应result 是一组成序偶的结果值default_result 未能与任何一序偶匹配成功时,函数返回的默认值下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。SELECT checkup_type, DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)FROM checkup;
nvl是判断字段的值是否为空的函数。
NVL(bpm.taskcategory, '执行.单位.流程.'||:TASKINIT)
判断 bpm.taskcategory 是否为null,如果为空,则返回 '执行.单位.流程.'||:TASKINIT
decode(NVL(bpm.taskcategory, '执行.单位.流程.'||:TASKINIT), '执行.单位.流程.'||:TASKNAME, '未处理', '已处理')
decode是一个条件处理语句,类似case xx when xx1 这样的。
所以上面的表示,判断 NVL(bpm.taskcategory, '执行.单位.流程.'||:TASKINIT) 这个值如果为
'执行.单位.流程.'||:TASKNAME,则返回 '未处理'
如果是其他的值,全部返回 '已处理'.
1、
NVL(bpm.taskcategory, '执行.单位.流程.'||:TASKINIT)
-- bpm.taskcategory 如果为空,取后面的值,非空就取本身的值
2、
decode(XXXXXXX, '执行.单位.流程.'||:TASKNAME, '未处理', '已处理')
-- 如果1中的值为 '执行.单位.流程.'||:TASKNAME 则 返回未处理,否则为已处理
为上面的答案补充一下,|| 为一个连接符,就像java中字符串的" + ",(例如,"a"+"b"),
:tanskinit ---- 注意前面的 冒号, 这是一个 绑定变量, 在SQLPLUS中声明的时候,用var XXXX
(例如: select * from test where name = :XXXX),起一个替换的作用,那两个函数的作用,如楼上所述。