如何将此脚本转换为Oracle

时间:2018-01-08 18:07:44

标签: sql oracle coalesce isnull

我必须创建一个可以在SQL Server和Oracle数据库中执行的脚本。脚本是:

update my_view
set value = 'Approved'
where token_name = 'TOKEN_NAME'
and isnull(value,'') = '

我从未在Oracle中运行过脚本,但我从互联网上知道Oracle没有isnull(它是NVL)或空字符串。

有什么方法可以为两者创建一个脚本(比如使用COALESCE-我真的不知道如何使用)?如果不是Oracle中的等效脚本?

2 个答案:

答案 0 :(得分:3)

编写逻辑的标准方法是:

update my_view
    set value = 'Approved'
    where token_name = 'TOKEN_NAME' and
          (value is null or value = '');

这是标准SQL,应该可以在任何数据库中使用。

另一方面,并​​非所有数据库都支持更新视图。

答案 1 :(得分:1)

如上所述,Oracle中不存在空字符串。它们可以通过几种方式处理。 Coalesce()NVL()的运作方式与isnull()类似。在3中,Coalesce是标准。来自Oracle docs:

COALESCE (expr1, expr2) = CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END

或者你可以这样做:

UPDATE my_view
SET value = 'Approved'
WHERE token_name = 'TOKEN_NAME'
AND nullif(value,'') IS NULL

nullif()会将空字符串计算为null(它应该在Oracle中)。