繁体   English   中英

奇怪的无效标识符错误oracle SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM