Oracleエラー対応(ORA-00920):「関係演算子が無効です」の対処方法について
現役DBAが解説 ~Oracleエラー対応~
SQLを実行する機会が多い方は、よくORA-00920に遭遇すると思います。
今回はエラー事例を元にORA-00920の原因・対策について説明します。
1. エラーメッセージ
ORA-00920: 関係演算子が無効です。
2. 事象・原因・対策
本記事では ORA-00920が発生するケースの中で代表的なものを2例記載します。
①比較演算子の指定に誤りがあるケース
比較演算子とは以下の記号のことを指し、主にWHERE句での比較処理に使用されます。
「= 一致」、「< > != 不一致」、「>= <=> < 大なり/小なり」
これらの演算子の指定に誤りがあるとORA-00920が発生するので、演算子の指定には注意が必要です。
以下に正常ケースとエラーケースの例文を記載します。
例1:正常終了とORA-00920エラー
SQL> select 'test' from dual where 1 = 1; 'TEST' -------- test SQL> select 'test' from dual where 1; select 'test' from dual where 1 * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL>
例1では「where 1 = 1(右辺と左辺が一致)」として比較条件を指定しています。
ここで「=」の演算子を無くすことでORA-00920を発生させています。
他の演算子でも同様に比較条件が間違っているとエラーになります。
例2:比較条件が間違っている他の演算子
SQL> select 'test' from dual where 1 => 1; select 'test' from dual where 1 => 1 * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL> select 'test' from dual where 1 := 1; select 'test' from dual where 1 := 1 * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL>
例2では「= 一致」、「>= 以上」の演算子が間違った形で指定されてるため、ORA-00920が発生しています。
補足として、比較条件の内容次第では他のエラー「ORA-00936: 式がありません。」、「ORA-00927: 等号がありません。」が発生します。
②グループ比較演算子の指定に誤りがあるケース
グループ比較演算子「ANY 条件のいずれかに一致」、「ALL 条件の全て一致」、「IN =ANYと同様」を使用した場合でも、ORA-00920が発生します。
「=ANY」を使用した正常ケースとエラーケースの例文は以下になります。
例3:正常終了とORA-00920エラー
SQL> select 'test' from dual where 1 = ANY (0,1,2); 'TEST' -------- test SQL> select 'test' from dual where 1 ANY (0,1,2); select 'test' from dual where 1 ANY (0,1,2) * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL>
そのほかにも、「1つの値とグループ値」ではなく、「グループ値とグループ値」の比較条件でも間違っているとORA-00920が発生します。
例4:正常終了とORA-00920エラー
SQL> select 'test' from dual where (0,1) = ANY ((0,1),(2,3)); 'TEST' -------- test SQL> select 'test' from dual where (0,1) = ANY (0,1,2,3); select 'test' from dual where (0,1) = ANY (0,1,2,3) * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL> select 'test' from dual where (0,1) = ((0,1),(2,3)); select 'test' from dual where (0,1) = ((0,1),(2,3)) * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL> select 'test' from dual where (0,1) = (0,1); select 'test' from dual where (0,1) = (0,1) * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL>
4. 最後に
本エラーは演算子の記述付近に原因がある場合が多いので、発生箇所の特定も容易です。
対応としては、演算子を正しく記述すれば解決するので、上記の正常時とエラー時の演算子を参考にしていただければ幸いです。