• ベストアンサー

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 ;

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

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

ご質問の件ですが、構文に間違いはありません。 正しい構文です。 考えられる点をいくつか挙げていきます。 ・接続しているユーザーに、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のカテに質問した方がよいのでは?その方が回等も得やすいと思います)

nakayama7
質問者

補足

すみません。 初歩的なミスに気づいてしまいました。。 以下のように修正すると問題なく表示されました。 select e.l_name, d.dept_name from emp e inner join dept d on e.dept_no=d.dept_no ; 色々と面倒をおかけしました。 ありがとうございました。

関連するQ&A