ORA-00904: 无效的标识符,当列标题正确时

Posted

技术标签:

【中文标题】ORA-00904: 无效的标识符,当列标题正确时【英文标题】:ORA-00904: invalid identifier, when column title is correct 【发布时间】:2018-04-06 00:49:21 【问题描述】:

我有一个大型 SQL 查询(15m 运行时)由其他人创建,我最近添加了一个新列“SSBSECT_MAX_ENRL”。现在我收到 ORA-00904 错误...但是名称是正确的,表参考也是如此。

在“长列列表”中没有任何更改。 没有是带有“引号”的别名,所有字段和命令都以 CAPS LOCK 字符输入。只是为了仔细检查,我删除了两条新行,它运行得很好。

表 DDEF_STAG.SSBSECT 有 2 个键,SSBSECT_TERM_CODE 和 SSBSECT_CRN。我已经检查了该字段的拼写五次。 “SSBSECT_MAX_ENRL”一个 P5 字段。

做了一些更多的挖掘,我意识到表首先被截断,插入。查询中的其他步骤使用 DROP 和 CREATE。

有什么线索或建议吗?

TRUNCATE TABLE DDEF_STAG.SCR_DRIVER;
(Drop all indexes)    
INSERT INTO DDEF_STAG.SCR_DRIVER
    (
       (Long list of columns)
     **SSBSECT_MAX_ENRL**
    )
    SELECT 
     (Long list of columns)
      **DDEF_STAG.SSBSECT.SSBSECT_MAX_ENRL**
    FROM
      DDEF_STAG.STVRSTS,
      DDEF_STAG.STVTERM STVTERM2,
      DDEF_STAG.STVTERM,
      DDEF_STAG.SYRPRLE,
      DDEF_STAG.SCBCRSE_XREF,
      DDEF_STAG.SSBSECT,
      DDEF_STAG.SGBSTDN,
      DDEF_STAG.SGBSTDN_XREF,
      DDEF_STAG.SFRSTCR,
      DDEF_STAG.STUDENT_TOINCLUDE_DWH
    WHERE (giant list of criteria too long to list)
(Recreate all indexes)  

【问题讨论】:

你在哪里(一长串的列)——你可能搞砸了那里的东西 运行此命令并让我们知道您是否可以看到新列:describe DDEF_STAG.SSBSECT; 只是为了仔细检查,我删除了两个新行,脚本运行得很好。表 DDEF_STAG.SSBSECT 有 2 个 Key,SSBSECT_TERM_CODE 和 SSBSECT_CRN,这两个键都在 select 语句中使用。我已经检查了该字段的拼写五次。 “SSBSECT_MAX_ENRL”一个 P5 字段。 也许您只是在添加的列之前错过了一个逗号? 【参考方案1】:

我发现了问题:需要删除并重新创建表,而不是使用 TRUNCATE 命令。

【讨论】:

以上是关于ORA-00904: 无效的标识符,当列标题正确时的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00904: "pass": 无效的标识符

在数据透视期间指定列时标识符无效 - ORA-00904

ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"

ORA-00904: 插入表时标识符无效

为啥我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效

ORA-00904 使用 CASE 语句更新表时标识符无效