SQL查询" 00904。 00000 - "%s:无效标识符"

时间:2015-04-09 18:51:37

标签: sql oracle

您好我有以下代码

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

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

6 个答案:

答案 0 :(得分:2)

您应该尝试使用小写表格/列标识符(例如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'

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

更改一个表名,它将起作用。

答案 4 :(得分:0)

有趣的是,Oracle不仅在列名不正确的情况下还会显示该消息,而且在表/别名的名称不正确的情况下也会显示此消息-未定义别名,两次定义(如@PrajwalRai所述),错误表名。

答案 5 :(得分:0)

老问题,但也许有帮助:

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

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