2017-10-05 118 views
1

我有一个甲骨文的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列。是什么赋予了?

+0

因为'theWeightOfTheAuthor'是一个不同的名称,所以''theWeightOfTheAuthor'''。有关详细信息,请参阅手册:https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223 –

回答

2

定义它时,请删除围绕"theWeightOfTheAuthor"的引号,或者在使用引号时添加引号。在定义名称时引用该名称使得名称区分大小写,并且因为Oracle将所有非引号标识符更改为UPPER CASE,所以对该字段的引用实际上是查找ATHW.THEWEIGHTOFTHEAUTHOR,该名称不存在。

Oracle编程的基本规则是 - 从不引用标识符。这是一个痛苦。只是不要这样做。

祝你好运。

0

您已经在双引号中指定了列别名(带有大小写),如"theWeightOfTheAuthor"。当为列名使用双引号时,Oracle保留大小写。如果您将其引用为不带引号,则会自动将其转换为大写形式,如athw.theWeightOfTheAuthor。所以这两个不匹配。

我的建议是从别名中删除双引号,所以它也会被解释为大写。或者,您可以对此列的所有引用使用双引号,但我没有看到在列名中使用混合大小写的任何好处。 (您仍然可以使用写为混合大小写,但为了便于阅读,但Oracle会将其视为全部大写。)

相关问题