2017-10-05 116 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會將其視爲全部大寫。)

相關問題