В общем случае, когда Oracle сравнивает различные типы данных, такие как число с характером, неявные ногами преобразования в и все хорошо (при условии, что данные могут быть преобразованы.) Например, если у вас есть функция, которая ожидает значение CHARACTER, но вы передаете ей NUMBER, все хорошо - Oracle просто преобразует NUMBER в символ.
E.g. функция, как это:
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.
Популярное где вы видите такую ошибку с ретуром n значений в операциях 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
(Тип данных от первого КОГДА пункт является то, что он ожидает, что в другом КОГДА/ELSE положения, которые следуют.)
Но в вашем случае КОГДА И ТОГДА оба возвращают счета - типы данных согласованы. Итак, я думаю, у вас там есть красная селедка.
Как Алекс уже упоминалось выше, ВАРИАНТ это ключевое слово, и если вы пытаетесь создать таблицу с этим именем столбца, 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.
Но теперь вы находитесь в мире боли - вам нужны цитаты с этого времени o п:
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", он смотрит на меня как-то не горит.
Является ли 'rs' псевдоним для' PR_OPTS', или есть соединение, которое вы не показываете? Каким типом данных является «ОПЦИЯ», и это заключено в двойные строчки в вашем фактическом коде, поскольку это [зарезервированное слово] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/ap_keywd001 .htm), или действительно называли что-то еще? –