[英]Strange Invalid identifier error oracle SQL
我有Oracle SQL查询的这一部分(在它上面有很多内容,不适用于该问题)...
authorw as (
select a.id, (sum(p.w)) "theWeightOfTheAuthor"
from ac a, pc p, authorpublication ap
where a.id = ap.aid and ap.pid = p.id
group by a.id)
select authorCount.id "ID", auth.name "NAME", authorCount.c "TOTAL_NUMBER_OF_PUBS",
athw.theWeightOfTheAuthor "W_SCORE",
(authorCount.C / athw.theWeightOfTheAuthor) "MULT"
from ac authorCount, authorw athw, Author auth
where authorCount.id = athw.id and authorCount.id = auth.id
order by TOTAL_NUMBER_OF_PUBS desc;
我收到错误的地方:
ORA-00904: "ATHW"."THEWEIGHTOFTHEAUTHOR": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 404 Column: 22
404行是最后一行的第四行:
(authorCount.C / athw.theWeightOfTheAuthor) "MULT"
注意:我可以很好地访问athw.id
,并且如果执行了authorw
创建操作,表theWeightOfTheAuthor
预期正确打印出来,并带有theWeightOfTheAuthor
列。 是什么赋予了?
定义时,请删除"theWeightOfTheAuthor"
周围的引号,或者在使用时添加引号。 在定义名称时引用该名称会使名称区分大小写,并且由于Oracle将所有未引用的标识符更改为UPPER CASE,因此您对该字段的引用实际上是在寻找ATHW.THEWEIGHTOFTHEAUTHOR,该名称不存在。
Oracle编程的基本规则是-永远不要引用标识符。 真痛苦 只是不要这样做。
祝你好运。
您已将列别名用双引号(大小写混合)指定为"theWeightOfTheAuthor"
。 当您在列名中使用双引号时,Oracle会保留大小写。 当您不带引号引用它时,如athw.theWeightOfTheAuthor
,Oracle会自动将其转换为大写。 所以两者不匹配。
我的建议是从别名中删除双引号,因此也将其解释为大写。 另外,您可以在此列的所有引用中使用双引号,但是在列名中使用混合大小写不会带来任何好处。 (出于可读性考虑,您仍然可以将其写为大写形式,但Oracle会将其视为大写形式。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.