Oracle Database を使用していると、SQL 実行時に次のようなエラーに遭遇することがあります。
ORA-00936: 式がありません
一見すると分かりにくいエラーですが、原因は SQL構文のごく基本的なミスであることがほとんどです。
本記事では、ORA-00936 が発生する主な原因と、具体的な SQL 修正例を分かりやすく解説します。
ORA-00936 とは何か?
ORA-00936: 式がありません は、
Oracle が 「ここには値(式)が来るはずなのに、何も書かれていない」 と判断した場合に発生するエラーです。
主に以下のようなケースで発生します。
-
カンマの位置が不正
-
WHERE / SET 句の記述漏れ
-
比較演算子の右辺・左辺が欠けている
-
サブクエリの構文ミス
よくある原因①:SELECT句のカンマ位置ミス
❌ エラーになる例
最後のカンマの後に式が存在しないため、ORA-00936 が発生します。
✅ 修正例
👉 SELECT 句の最後に不要なカンマがないかを必ず確認しましょう。
よくある原因②:WHERE句の条件不足
❌ エラーになる例
比較演算子の右側に値が存在しないため、Oracle が「式がない」と判断します。
✅ 修正例
よくある原因③:IN 句の中身が空
❌ エラーになる例
IN 句には 必ず1つ以上の値が必要です。
✅ 修正例
よくある原因④:UPDATE文の SET 句ミス
❌ エラーになる例
SET 句に 代入式が存在しないため、ORA-00936 が発生します。
✅ 修正例
よくある原因⑤:動的SQLでの文字列生成ミス
Java や PL/SQL などで SQL を動的生成している場合、
条件が空文字になった結果、構文エラーになることも多くあります。
👉 動的SQLの場合は、生成された最終SQLをログ出力して確認することが重要です。
ORA-00936 が出たときのチェックポイント
エラー発生時は、次の点を重点的に確認してください。
-
SELECT / SET / IN 句の 末尾カンマ
-
WHERE 句の 比較演算子の左右
-
IN () が 空になっていないか
-
動的SQLで 条件文字列が欠落していないか
