こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL plusで分からない初歩的な構文

SQL Plusを独学で学び始めたものです。
以下の構文を制作したのですが、

「"d"."depart_id":無効な識別子です」
といったエラー文が出てきます。

この構文に何か間違いはあるのでしょうか?

select
e.l_name,
d.depart_name
from
emp e
inner join
dept d
on
e.depart_id=d.depart_id
;

投稿日時 - 2011-05-06 17:55:24

QNo.6718353

困ってます

質問者が選んだベストアンサー

ご質問の件ですが、構文に間違いはありません。
正しい構文です。

考えられる点をいくつか挙げていきます。

・接続しているユーザーに、deptテーブルが無い(またはSELECT権限が無い)
・エラーの文字通り、deptテーブルに depart_id が無い

SQL> desc dept

と打ってみてください。

これでエラーになるなら

・接続しているユーザーにdeptテーブルが無いので、deptテーブルがあるユーザーに接続しなおす
・そもそも作っていないなら、deptテーブルを作る

エラーにならないが、カラムの一覧に depart_id が表示されないなら

・deptテーブルが間違って作られているので、作り直す

となります。

上記が問題ないのであれば、ちょっと、微妙ではありますが、使用されているバージョンがANSI JOIN(INNER JOINやLEFT JOIN)の構文に対応していない古いバージョンである、なども考えられます。

ただ、エラーの内容(ORA-00904:無効な識別子です)からすると、他の原因もありそうな気がします。

このエラーは引用符(シングルクォート、ダブルクォート)の扱いを間違える事で発生する場合が多いんです。

例えば、CREATE時に

>CREATE TABLE "dept"
>(中略)
>"depart_id" number,
>(以下略)

みたいに、小文字をダブルクォートで括ったりしていませんか?
この場合、ORACLEの仕様上、

d.depart_id  →エラーになる
D.DEPART_ID  →エラーになる
d."depart_id" →正常終了

になります。

何故そうなるのか、については長くなるので書きませんがw、気になったら補足に入れてもらえれば説明します。

蛇足ですが、SQL plus(SQL*Plus)はORACLEのクライアントプログラムの名前なので、
「ORACLEを独学で学び始めたものです。」
の方が適切な書き出しですね。
(ORACLEのカテに質問した方がよいのでは?その方が回等も得やすいと思います)

投稿日時 - 2011-05-06 20:55:49

補足

すみません。
初歩的なミスに気づいてしまいました。。
以下のように修正すると問題なく表示されました。

select
e.l_name,
d.dept_name
from
emp e
inner join
dept d
on
e.dept_no=d.dept_no
;


色々と面倒をおかけしました。
ありがとうございました。

投稿日時 - 2011-05-08 11:20:48

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)