2017-10-05 18 views
1

私は(質問には適用されませんので、それ以上の多くのより多くの) ...奇妙な無効な識別子のエラーの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; 

をOracleのSQLクエリのこの部分を持っています:

ORA-00904: "ATHW"."THEWEIGHTOFTHEAUTHOR": invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 
Error at Line: 404 Column: 22 

ライン404は、最後の行から4番目のもの:

(authorCount.C/athw.theWeightOfTheAuthor) "MULT" 

注:I athw.idにアクセスできます。authorwの作成まで実行すると、テーブルは正しくtheWeightOfTheAuthor列に正しく印刷されます。何がありますか?

+0

'theWeightOfTheAuthor'は'「theWeightOfTheAuthor」 'その後、別の名前であるため。詳細は、マニュアルを参照してください。https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223 –

答えて

2

定義時に"theWeightOfTheAuthor"の引用符を削除するか、引用符を使用するときに引用符を追加してください。名前を引用符で囲むと大文字と小文字が区別され、Oracleは引用符で囲まれていないすべての識別子を大文字に変換するため、フィールドへの参照は存在しないATHW.THEWEIGHTOFTHEAUTHORを実際に探しています。

Oracleプログラミングの基本的なルールは - 決して識別子を引用しません。それは痛みです。ただしないでください。

幸運のベスト。

0

大文字と小文字が混在する二重引用符で囲んだ列の別名を"theWeightOfTheAuthor"と指定しました。列名に二重引用符を使用すると、Oracleは大文字小文字を保持します。引用符なしで参照する場合は、athw.theWeightOfTheAuthorのように、Oracleは自動的に大文字に変換します。したがって、2つは一致しません。

私の提案は、エイリアスから二重引用符を削除することです。そのため、大文字と解釈されることもあります。また、この列へのすべての参照に二重引用符を使用することもできますが、列名に大文字と小文字を混在させることによるメリットはありません。 (あなたはまだ読みやすくするために、混合ケースとしてにそれを書くことができますが、Oracleはすべて大文字として、それが表示されます。)

関連する問題