Searched Case работает / Simple Case не работает в Oracle

У меня есть следующий выбор поля Searched Case в запросе Oracle 10g SELECT

(case 
    when LOADER_CELLS.CELL_MODE='RW' then 1
    when LOADER_CELLS.CELL_MODE='R' then 2
end) as CELL_EDIT_MODE_ID

но если я напишу это как выражение Simple Case, следующим образом:

(case LOADER_CELLS.CELL_MODE
    when 'RW' then 1
    when 'R' then 2
end) as CELL_EDIT_MODE_ID

Я получаю ошибку ORA-12704: character set mismatch в строке when 'RW'.

Я просмотрел документацию Oracle, и кажется, что мой синтаксис правильный. http://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm

Может ли кто-нибудь помочь мне в этом?


person Teejay    schedule 18.01.2013    source источник
comment
Как определяется CELL_MODE? Кажется, что-то несовместимо между типом переменной и типом константы при использовании в простом операторе case.   -  person Gordon Linoff    schedule 18.01.2013
comment
CELL_MODE это NVARCHAR2(255). Я предположил, что это может быть проблема с кодировкой, но я не знаю, как преобразовать постоянные строки в NVARCHAR. Также я не понимаю, почему вместо этого работает Searched case.   -  person Teejay    schedule 18.01.2013


Ответы (1)


"Я предположил, что это может быть проблема с кодировкой, но я не знаю, как "преобразовать" константные строки в NVARCHAR"

вы делаете это с синтаксисом «N».

case LOADER_CELLS.CELL_MODE
    when n'RW' then 1
    when n'R' then 2
end

eg

SQL> select case a when 'a' then 1 end from foo;
select case a when 'a' then 1 end from foo
                   *
ERROR at line 1:
ORA-12704: character set mismatch


SQL> select case a when n'a' then 1 end from foo;

CASEAWHENN'A'THEN1END
---------------------
person DazzaL    schedule 19.01.2013
comment
Спасибо, в понедельник попробую и сообщу. - person Teejay; 19.01.2013