在一个存储过程(在我的情况下是Oracle)中,我想向现有记录添加一些值.问题是现有值和要添加的值都可以为null.当两个操作数都为空时,我只希望结果为NULL.如果只有一个为null,我希望结果是另一个操作数.如果两者均为非空值,则我希望结果为“正常”.
这是我到目前为止使用的
SELECT column INTO anz_old FROM aTable Where <someKeyCondition>; IF anz_old IS NULL THEN anz_new := panzahl; ELSE anz_new := anz_new + NVL (panzahl,0); END IF; UPATE aTabel set column = anz_new Where <someKeyCondition>;
有没有更优雅的方式(在sql中完全是完全的,即只是在一个更短的语句中缺少一个长的CASE-Statement,基本上与上面的代码相同)
解决方法
如果要添加a和b并且可以为null,则可以使用coalesce,它返回传递它的第一个非空参数:
coalesce(a+b,a,b)
所以在这种情况下,如果两个参数都不为null,它将返回总和.如果只有b为null,它将跳过b并返回a.如果a为空,则将跳过b和a并返回b,如果它们都为空,则只能为null.
如果您希望答案为0而不是null,如果a和b都为空,则可以将0作为最后一个参数:
coalesce(a+b,b,0)
考虑@erwins answer – null可能不是正确的使用.