Oracle Database を使用して SQL を実行した際に、
「ORA-00907: 右括弧がありません」というエラーが表示されることがあります。
このエラーは一見すると単純な構文ミスのように見えますが、実際には原因が複数あり、慣れていないと修正に時間がかかりがちです。
また、エラーメッセージの内容と、実際に間違っている箇所が一致しないケースも多く、混乱しやすいのが特徴です。
この記事では、Oracle の SQL で発生する ORA-00907 エラーについて、
現場で頻出する原因と、具体的な修正ポイントを整理して解説します。

ORA-00907 エラーとは何か
ORA-00907 は、SQL の構文解析時に「右括弧 ) が必要な位置に存在しない」と Oracle が判断した場合に発生するエラーです。
ただし、実際に右括弧が不足しているとは限りません。
以下のようなケースでも、このエラーが発生します。
- 括弧の位置は合っているが、SQL の文法として不正
- Oracle 固有の構文ルールに違反している
- 関数やサブクエリの書き方が誤っている
- 別の箇所の構文エラーが、括弧エラーとして検出されている
そのため「括弧を数えるだけ」では解決しない場合が多いのが、このエラーの厄介な点です。
よくある原因① カンマの付け忘れ・付けすぎ
最も多い原因のひとつが、SELECT 句や関数引数でのカンマの誤りです。
例:SELECT 句のカンマ不足
|
1 2 |
SELECT col1 col2 FROM sample_table; |
この場合、col1 と col2 の間にカンマがないため、Oracle は構文を正しく解釈できず、ORA-00907 を返すことがあります。
正しい例
|
1 2 |
SELECT col1, col2 FROM sample_table; |
カンマの不足や余計なカンマは、括弧エラーとして検出される代表例です。
よくある原因② 関数の括弧構造の誤り
Oracle の関数は、引数の数や括弧の位置に厳密です。
例:NVL 関数の引数不足
|
1 2 |
SELECT NVL(col1) FROM sample_table; |
NVL は 2 つの引数が必須のため、構文エラーとなります。
正しい例
|
1 2 |
SELECT NVL(col1, 0) FROM sample_table; |
引数不足や順序ミスは、右括弧がないという形でエラー表示されることがあります。
よくある原因③ IN 句・VALUES 句の書き方ミス
IN 句や INSERT 文の VALUES 句も、ORA-00907 の発生ポイントです。
例:IN 句のカンマ漏れ
|
1 2 3 |
SELECT * FROM sample_table WHERE id IN (1 2 3); |
正しい例
|
1 |
WHERE id IN (1, 2, 3); |
数値や文字列の区切りが正しくないと、括弧エラーとして扱われます。
よくある原因④ サブクエリの構文ミス
サブクエリを含む SQL では、括弧の数自体は合っていても、文法的に不正な場合があります。
例:FROM 句内のサブクエリ
|
1 2 |
SELECT * FROM (SELECT col1 FROM sample_table; |
右括弧が不足しているため、当然エラーになりますが、
実際の現場では SELECT 文が長く、見落としやすいケースが多いです。
正しい例
|
1 2 |
SELECT * FROM (SELECT col1 FROM sample_table); |
よくある原因⑤ Oracle 独自構文の制約違反
他の RDBMS では通る SQL が、Oracle ではエラーになることもあります。
例:ORDER BY の位置
|
1 2 3 |
SELECT DISTINCT col1 FROM sample_table ORDER BY col2; |
この場合、ORDER BY で指定した列が SELECT 句に含まれていないと、エラーになるケースがあります。
エラー内容が ORA-00907 として返されることもあり、原因特定を難しくします。
対処法の基本手順
ORA-00907 が発生した場合は、以下の順で確認すると効率的です。
- 直前に編集した箇所を確認する
- カンマの有無を一つずつ確認する
- 関数の引数数と括弧構造を確認する
- サブクエリを単体で実行してみる
- SQL を整形して構造を可視化する
特に SQL フォーマッタを使ってインデントを整えるだけで、原因が一気に見えることがあります。
よくある質問(Q & A)
- 本当に右括弧が足りない場合は多いですか?
-
実際には、右括弧そのものが不足しているケースは少数です。
多くの場合は、カンマや関数構文の誤りが原因です。 - エラー行番号がずれているのはなぜですか?
-
Oracle は構文解析の途中でエラーを検出するため、
実際の誤り箇所より後ろを指すことがあります。 - SQL が長すぎて原因が分かりません
-
一度 SELECT 句や WHERE 句を分割し、段階的に実行してください。
どの時点でエラーが出るかを見ると切り分けやすくなります。 - 他の ORA エラーと併発することはありますか?
-
はい。ORA-00936 や ORA-00933 などと同時に発生するケースもあります。
最初に出たエラーから順に修正するのが基本です。
まとめ
ORA-00907: 右括弧がありません は、
単純な括弧不足ではなく、SQL 全体の構文ミスを示していることが多いエラーです。
カンマ、関数、IN 句、サブクエリといった頻出ポイントを順番に確認すれば、
無駄に時間をかけずに原因を特定できます。
エラーメッセージに惑わされず、SQL の構造を冷静に見直すことが、最短の解決につながります。
SQL の構文エラーとしては、本記事で解説している ORA-00907 以外にも、
SELECT 句や式の書き方が原因で発生する ORA-00936 エラーも非常によく見られます。
ORA-00936 については、以下の記事で具体例と対処法を詳しく解説しています。



