Oracle COALESCE或NVL

MB3*_*B34 1 sql oracle coalesce sql-update

我有一个存储过程,我只想在参数为NOT NULL时使用SYSDATE更新表中的值.

在下面的SQL中,如果pETime IS为NULL,我想将SYSENDDATE设置为NULL,否则为SYSDATE

UPDATE OLCACT SET 
    ENDDATE    = pETime, 
    SYSENDDATE = SYSDATE, 
    GRD        = pGRD,
    PASS       = v_pass
Run Code Online (Sandbox Code Playgroud)

不知道如何使用NVL或COALESCE来做到这一点.

Jus*_*ave 5

正如@Mureinik所说,这nvl2是一种完全有效的方法.即使这是一个内置函数,它的名字也不是特别好或众所周知,所以我倾向于避免它.很容易无意中读到这个,nvl或者有人不记得那个功能到底做了什么.我宁愿使用一个CASE让我的意图清晰的陈述

UPDATE OLCACT SET 
    ENDDATE    = pETime, 
    SYSENDDATE = (CASE WHEN pETime IS NOT NULL
                       THEN sysdate
                       ELSE null
                   END)
    GRD        = pGRD,
    PASS       = v_pass
Run Code Online (Sandbox Code Playgroud)

这比nvl2选项更冗长.但是,将来看待它的随机开发人员更有可能立即了解它在做什么.