【问题标题】:SQLPLUS IF Function in Select Causes Identifier Too Long ErrorSelect 中的 SQLPLUS IF 函数导致标识符过长错误
【发布时间】:2017-06-08 15:18:33
【问题描述】:

下面的选择语句导致ORA-00972: identifier is too long 错误。怀疑语法错误。运行此选择以在 Oracle 数据库上的 SQLPLUS 中生成视图。请指教。谢谢。

SELECT DISTINCT
    (CASE WHEN PROCEDURE_CODE IS NULL THEN REVENUE_CODE ELSE PROCEDURE_CODE END)
FROM HEALTH.DATA

【问题讨论】:

  • 语句在语法上没有错。您是否尝试过不区分地运行它?也可以尝试在 fiddle 或 dual 语句的帮助下重现它,给我们一些可以使用的东西
  • 您缺少该值的别名。创建视图时,所有列都必须通过 Oracle 中的名称定义规则。所以基本上,您需要为该列添加一个名称。
  • 不相关,但是:case 表达式周围的括号没有用。
  • 好奇你在创建视图时没有得到ORA-00998: must name this expression with a column alias。可能有助于显示您正在运行的整个语句,并包含完整的 Oracle 版本。

标签: sql oracle ora-00972


【解决方案1】:

我无法重现该问题,但可能是我的数据库版本不同。

我的猜测是为您的选择添加别名:

SELECT DISTINCT (CASE
                   WHEN PROCEDURE_CODE IS NULL THEN
                    REVENUE_CODE
                   ELSE
                    PROCEDURE_CODE
                END) AS THING
  FROM HEALTH.DATA

如果您不指定任何内容,它会使用完整的“CASE”“构建”列名,我想它可能会打破一些限制。

【讨论】:

  • @Beemer12 很高兴!您可以将我的答案标记为已接受,以便其他人可以快速找到它。
  • 限制为 30 个字符;在 Oracle 12.2 中此限制已更改为 128
猜你喜欢
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2021-03-27
  • 2017-08-14
  • 2019-12-11
相关资源
最近更新 更多