我必须创建一个可以在SQL Server和Oracle数据库中执行的脚本。脚本是:
update my_view
set value = 'Approved'
where token_name = 'TOKEN_NAME'
and isnull(value,'') = '
我从未在Oracle中运行过脚本,但我从互联网上知道Oracle没有isnull(它是NVL)或空字符串。
有什么方法可以为两者创建一个脚本(比如使用COALESCE-我真的不知道如何使用)?如果不是Oracle中的等效脚本?
答案 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中)。