一般に、Oracle が NUMBER などの異なるデータ型を CHARACTER と比較する場合、暗黙的な変換が開始され、すべて問題ありません (データを変換できる場合)。たとえば、CHARACTER 値を期待する関数があり、NUMBER を渡す場合、すべて順調です-Oracleは単純にNUMBERを文字に変換します。
たとえば、次のような関数:
create or replace function get_something(p_id VARCHAR2) return number ...
これで呼び出すと動作します:
get_dno(10);
またはこれ:
get_dno('10');
そしてSQLでは:
select * from some_table where numeric_column = '10' -- no problem.
この種のエラーが表示される一般的な場所は、CASE ステートメントの戻り値です。たとえば、次のような場合にエラーが発生します。
SQL> SELECT CASE WHEN 1 = 1 THEN '1' ELSE 2 END
2 FROM dual
3 ;
SELECT CASE WHEN 1 = 1 THEN '1' ELSE 2 END
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
(最初の WHEN 句のデータ型は、後続の他の WHEN/ELSE 句で期待されるものです。)
しかし、あなたの場合、 WHEN と THEN の両方がカウントを返します - データ型は一貫しています。それで、そこにニシンがいると思います。
Alex が前述したように、OPTION はキーワードであり、それを列名として使用してテーブルを作成しようとすると、Oracle は同意しません。
SQL> create table dummy
2 (option varchar2(10)
3 );
(option varchar2(10)
*
ERROR at line 2:
ORA-00904: : invalid identifier
これは機能します:
SQL> create table dummy
2 (option_col varchar2(10)
3 );
Table created.
または引用符でそれを行うことができます:
SQL> create table dummy
2 ("option" varchar2(10));
Table created.
しかし今、あなたは傷だらけの世界にいます。これからは引用符が必要です。
SQL> select option from dummy;
select option from dummy
*
ERROR at line 1:
ORA-00936: missing expression
SQL> select d.option from dummy d;
select d.option from dummy d
*
ERROR at line 1:
ORA-01747: invalid user.table.column, table.column, or column specification
引用符付き:
SQL> select d."option" from dummy d;
no rows selected
したがって、クエリが実際に「期待されたCHAR、取得したNUMBER」を提供している場合、何かがおかしいように見えます。