SQL 查询 "00904.00000 - "%s: 无效标识符"

Posted

技术标签:

【中文标题】SQL 查询 "00904.00000 - "%s: 无效标识符"【英文标题】:SQL Queries "00904. 00000 - "%s: invalid identifier" 【发布时间】:2015-04-09 18:51:36 【问题描述】:

您好,我有以下代码

SELECT  entertainer_id,
        entertainer_groupname
FROM    casestudy_entertainer
INNER JOIN casestudy_availability ON 
casestudy_entertainer.entertainer_id 
     = CASESTUDY_AVAILABILITY.AVAILABILITY_ENTERTAINERID
INNER JOIN casestudy_calendardates ON 
CASESTUDY_AVAILABILITY.AVAILIBILITY_CALENDARDATEID 
     =  casestudy_calendardates.calendar_Id
WHERE   entertainer_type = '&Entertainer_TYPE' 
AND     casestudy_calendardates.calendar_date = '&Event_date'

当我运行它时,我似乎无法弄清楚它不喜欢什么。 它给了我以下错误

ORA-00904:“CASESTUDY_AVAILIBILITY”。“AVAILIBILITY_CALENDARDATEID”:标识符无效 00904. 00000 - “%s:无效标识符” *原因: *行动: 行错误:7 列:4

我确实拥有所有正确行的所有表格。 唯一的问题是我还没有数据,这可能是问题吗?

【问题讨论】:

大胆猜测:也许您应该尝试使用小写的表/列标识符?(如from/inner join 子句) @notulysses 是正确的。 ON 子句在大小写上必须与JOIN 子句匹配,即INNER JOIN casestudy_calendardates ON casestudy_availability.availability_calendardateid = casestudy_calendardates.calendar_Id 等... 是的,效果很好,谢谢! @JonathanSteward:我已将其发布为答案。 【参考方案1】:

您应该尝试使用小写的表/列标识符(如在from/inner join 子句中):

SELECT  entertainer_id,
        entertainer_groupname
FROM    casestudy_entertainer
INNER JOIN casestudy_availability ON casestudy_entertainer.entertainer_id = casestudy_availability.availability_entertainerid
INNER JOIN casestudy_calendardates ON casestudy_availability.availibility_calendardateid = casestudy_calendardates.calendar_id
WHERE entertainer_type = '&Entertainer_TYPE'
  AND casestudy_calendardates.calendar_date = '&Event_date'

【讨论】:

能否请我们解释一下您到底在说什么以及为什么有人将其标记下来;但它被接受了。我很困惑这个解决方案到底发生了什么以及它是否有效。 @Mr.Tea :我说的是数据库和表名等标识符在某些平台上区分大小写。因此,基于我对错误消息的假设,我建议将大写标识符更改为小写标识符。并且downvote部分可能是由于我的初步阐述含糊或不充分造成的) @KyleBridenstine 默认情况下,Oracle 忽略大小写。但是您刚才使用的数据库可以设置不同。显然,提问者遇到了这个问题,但这不是唯一可能的问题 - 这里的其他答案也可以,并且可以适用于您的情况。【参考方案2】:

离开加入时,您的表中有相同的表名。

更改一个的表名,它会工作。

【讨论】:

【参考方案3】:

没有数据不是问题,您不会简单地得到空结果。 ORA-00904 表明,您使用的列不存在或不符合 Oracle 规范。

请检查命名是否正确。您可能最好使用较短的名称或至少使用表别名,以使代码更具可读性。

在不知道您的表结构的情况下,我无法告诉您错误在哪里。做一个describe table_name;

拥有 oracle 版本号 SELECT * FROM V$VERSIONSELECT version FROM V$INSTANCE 也会有所帮助 以及您正在使用的客户端软件

【讨论】:

【参考方案4】:

此错误是由数据库表的某一列中的特殊字符引起的。 DBA 将能够为您提供帮助。

【讨论】:

【参考方案5】:

有趣的是,Oracle 不仅会在列名错误时给出该消息,而且如果表/别名的名称错误 - 未定义别名,两次定义(如 @PrajwalRai 所述),错误表名。

【讨论】:

【参考方案6】:

老问题,但也许有帮助:

有时您从具有不同字符集的来源复制和粘贴文本...

例如在 sql-dev 中输入,看看错误是否消失

【讨论】:

以上是关于SQL 查询 "00904.00000 - "%s: 无效标识符"的主要内容,如果未能解决你的问题,请参考以下文章

Sql 错误 00904. 00000 - “%s: 无效标识符”

Oracle sql 连接计数给了我 00904 的错误。00000 - "%s: invalid identifier

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

错误报告:SQL 错误:ORA-00904::无效标识符 00904。00000 - “%s:无效标识符”

sql developer "%s: invalid identifier",外键错误

SQL 错误:ORA-00904:“GENDER”:无效标识符 00904。00000 -“%s:无效标识符”