如何将此脚本转换为 Oracle
How to convert this script to an Oracle
我必须创建一个可以在 SQL 服务器和 Oracle 数据库中执行的脚本。脚本是:
update my_view
set value = 'Approved'
where token_name = 'TOKEN_NAME'
and isnull(value,'') = '
我从来没有 运行 Oracle 中的脚本,但我从互联网上知道 Oracle 没有 isnull(它是 NVL)或空字符串。
有什么方法可以只为两者创建一个脚本(比如使用 COALESCE,我真的不知道如何使用)?如果没有,Oracle 中的等效脚本是什么?
编写逻辑的标准方法是:
update my_view
set value = 'Approved'
where token_name = 'TOKEN_NAME' and
(value is null or value = '');
这是标准的 SQL,应该适用于任何数据库。
另一方面,不一定所有数据库都支持更新视图。
如上所述,Oracle 中不存在空字符串。它们可以通过几种方式处理。 Coalesce()
和 NVL()
的操作类似于 isnull()
。在这 3 个中,Coalesce 是标准配置。来自 Oracle 文档:
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 中)。
我必须创建一个可以在 SQL 服务器和 Oracle 数据库中执行的脚本。脚本是:
update my_view
set value = 'Approved'
where token_name = 'TOKEN_NAME'
and isnull(value,'') = '
我从来没有 运行 Oracle 中的脚本,但我从互联网上知道 Oracle 没有 isnull(它是 NVL)或空字符串。
有什么方法可以只为两者创建一个脚本(比如使用 COALESCE,我真的不知道如何使用)?如果没有,Oracle 中的等效脚本是什么?
编写逻辑的标准方法是:
update my_view
set value = 'Approved'
where token_name = 'TOKEN_NAME' and
(value is null or value = '');
这是标准的 SQL,应该适用于任何数据库。
另一方面,不一定所有数据库都支持更新视图。
如上所述,Oracle 中不存在空字符串。它们可以通过几种方式处理。 Coalesce()
和 NVL()
的操作类似于 isnull()
。在这 3 个中,Coalesce 是标准配置。来自 Oracle 文档:
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 中)。