【问题标题】:How to convert this script to an Oracle如何将此脚本转换为 Oracle
【发布时间】:2018-01-08 18:07:43
【问题描述】:

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

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

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

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

【问题讨论】:

  • 什么是不同于 Oracle 的“sql 数据库”?
  • SQL Server 数据库
  • 我不了解 SQL Server,也无法判断最后一个条件是什么意思。 (最后等号后面真的是SINGLE单引号吗?是错字吗?如果不是什么意思?)无论如何,如果你能用简单的英语解释一下,比如value must be either the empty string or .....,我也许可以提供帮助。该解决方案不应使用非 SQL 标准函数;最好使用coalesce,或case 表达式。

标签: sql oracle coalesce isnull


【解决方案1】:

编写逻辑的标准方法是:

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

这是标准 SQL,应该适用于任何数据库。

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

【讨论】:

  • @a_horse_with_no_name 。 . . OP 正在寻找适用于 Oracle 和 SQL Server 的逻辑。
【解决方案2】:

如上所述,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 中)。

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多