Oracleで「ORA-00906: 左カッコがありません。」のエラーが出た時の対処法

投稿日:

はい。

そろそろ、上司の無茶目な仕様変更にも折り合いをつけて行きたいSEっぽいことをやってる人です。

前にも書いたかもしれないけど、また、どハマリしたOracleのエラーについて。

エラーの内容が全てじゃないよという話。

 

 

右カッコ「(」はある。足りてるのに「ORA-00906: 左カッコがありません。」とエラーになる。

原因は様々ですが、「ORA-00906: 左カッコがありません。」というエラーに悩まされたことのある人は多いはず。

きっと。

今回実行したSQLはこちら。


create table table_01 (
col001 VARCHAR2
, col002 VARCHAR2 default ' ' not null
, col003 VARCHAR2 default ' ' not null
, constraint table_01_PKC primary key (col001)
) ;

見事にエラーになります。

で、このエラー、カッコが無いという理由以外でも出るみたいです。

「ORA-00907: 右カッコがありません。」 というエラーもある。

ORA-00907: 右カッコがありません。」っていうエラーも出ることがあります。

きっと、似てるはず。

こちらのサイトをみたところ

とりあえず目を皿のようにして SQL文を舐めるように見直したのですが、何度数えなおしてもカッコの数は合ってます。あるえ?

とはいえ、受け付けてくれないのでは先に勧めないので、Webで検索してみたところ、なんとこのメッセージ、右カッコが無い場合以外でも出るみたいじゃないですか!

例えば、

  • DEFAULT句が NOT NULL の後にある
  • 不要な箇所にカンマが入っている
  • カラムの型の桁数を指定しない
  • ON とか AND が正しくない使われ方をしている
  • CASE文の中で WHEN が抜けている
  • 副問い合わせに order by が入っている
  • クォーテーションが正しく使われていない

などなど。カッコ関係ないじゃん!

引用:Oracleはカッコがあっても 「ORA-00907: 右カッコがありません。」

 

マジか\(^o^)/

カッコ関係ないじゃん!

画面を殴りたくなりましたw

もう一度、SQLを見直してみる


create table table_01 (
col001 VARCHAR2
, col002 VARCHAR2 default ' ' not null
, col003 VARCHAR2 default ' ' not null
, constraint table_01_PKC primary key (col001)
) ;

知ってる人は気づくけど、知らない人は気づくまでに時間がかかる罠・・・

VARCHAR2には、バイト数か文字数を指定する必要がありましたw

正しくは、


create table table_01 (
col001 VARCHAR2(20)
, col002 VARCHAR2(255) default ' ' not null
, col003 VARCHAR2(255) default ' ' not null
, constraint table_01_PKC primary key (col001)
) ;

確かに、左カッコといえば左カッコだけど、それなら、VARCHAR2で定義が不足してるとか表示してくれた方が分かりやすかったかな・・・と。

普段、エディタ経由でDDLとか作成しているので、エラーに気づきにくい?

普段、A5Mk2というエディタでER図を作ったり、SQLを実行したりしてます。

A5Mk2はこちら

SQL Developerで言う、クエリー・ビルダーですかね。

クエリー・ビルダーで表の作成を行うと

DDLの作成時に、VARCHAR2の後ろに「()」と付いていています。

そして、OKボタンをクリックすると、エラーになりますw

ということで、サイズを指定してから、OKボタンをクリックすると、テーブルが無事作成されました。

 

A5Mk2との違いは、VARCHAR2の後ろに「()」が追加されるかされないかだけ。

ぶっちゃけ気づかなかったw

そこは、まぁSQL DeveloperはOracleが提供してるので、そういうところにも手が届くんだろうね。

っていうか、A5Mk2にそこまで求めてはいけないので、自分で気をつけないといけない。

VARCHAR2とCHARの違いとかありますが、それはまた別の話なので詳細は省きます。

まとめ

  • Oracleのエラーは、全てが全て正しいことを表示しているわけじゃない
  • カッコの数とかを簡単にチェックしたら、それ以外の構文の可能性を検討する

エディタに頼ってばかりではいけないなと思うけど、省力化のためのエディタなので、もうちょっとOracleというか、Oracleの勉強しとかないとマズイな・・・

まだまだ勉強が足りないw







-ORACLE
-,

関連記事

[ORACLE]ORA-24344:正常に終了しましたが、コンパイル・エラーがあります。

全然、正常に終われてねぇんじゃん?? って思った。 ビューの作成時に発生。 ネットで検索するも、明確な回答は見当たらず・・・ ただ、エラーには違いないので、ビューが正しく作成されていないことになる。 …

Oracleで「ORA-00918: 列の定義が不明瞭です 」のエラーの解決法と発生理由

発生したエラー ORA-00918: 列の定義が不明瞭です 原因 原因は、同じ列名やテーブルの別名を使用していること。 解決方法 Select句で羅列している列に同一の列名(別テーブル)があれば、as …

[ORACLE]最初の有効値を返すCOALESCE・・・読み方分からねぇw

知らなかったら、多分CASEとかで判定してた。 まぁ、人の書いたSQLは勉強になるよねって話・・・じゃないなw 事の発端は、今のプロジェクトで別の人が作った画面の修正をやることになったこと。 その人は …

[Oracle]長文SQLをWITH句を使って、SQLの繰り返しをまとめる

自分、WITH句アレルギーです\(^o^)/ 今でこそ、使うようになりましたが、最初は拒否反応バリバリでした。 だって、WITH句で何ができるのか良く分からなかったからです。 VIEWのように使えるか …

[ORACLE]Oracleに接続できない時に確認すること

Oracleを新しくインストールした時に、中々接続できなかったので、その時に確認しておくべき事項のまとめ。 少なくとも、これは先にやっておいた方がいいこととか。 前提条件 前提と書くとものものしいけど …


カテゴリー