与nvl相反的功能

时间:2013-09-13 16:32:45

标签: sql oracle

我一直在网上搜索试图找到答案,但我空手而归。我想知道是否有一个函数与nvl函数相反。像这样:

UPDATE transaction_review
   SET "function use if null"(review1,review2) = 'Yellow',
       "function use if null"(reason1,reason2) = 'Audit'
 WHERE ACCOUNT = '11111111'

基本上,如果已经填充了review1,update将选择review2。有这样的function吗?感谢。

4 个答案:

答案 0 :(得分:1)

如果我理解正确,请尝试使用 coalesce 功能,如下所示

UPDATE transaction_review
set review1 = coalesce(review1,'Yellow'),
    review2 = coalesce(review2,'Audit')
WHERE ACCOUNT = '11111111'

答案 1 :(得分:0)

将逻辑放在case语句中:

UPDATE transaction_review
set review1 = coalesce(review1,'Yellow'),
    review2 = (case when review1 is null then review2 else 'Audit' end)
WHERE ACCOUNT = '11111111'

答案 2 :(得分:0)

如果不使用dynamic SQL

,则无法有条件地选择要更新的列

也许尝试使用此处记录的NVL2功能:http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions120.htm

它提供了一个很好的IF..THEN..ELSE语法,可能适合您的要求。

如果您使用上述方法,则必须有两个单独的SET语句。

答案 3 :(得分:0)

在plSQL中尝试NVL2命令。

  

NVL2函数接受三个参数。如果第一个参数   value不为null,它将返回第二个参数中的值。如果   第一个参数值为null,它将返回第三个参数。