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来做到这一点.
正如@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选项更冗长.但是,将来看待它的随机开发人员更有可能立即了解它在做什么.
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |