Я сталкивался с таким сценарием, когда вставка, основанная на столбце '' on number ', работает нормально, а оператор case выдает другую ошибку. "несовместимые типы данных: ожидаемые% s получили% s"
Я рассмотрел некоторые объяснения, приведенные здесь ( ORA-00932 несовместимые типы данных ожидают, что char получил номер ) и Oracle SQL СЛУЧАЙ, КОГДА ORA-00932: несовместимые типы данных: ожидаемый CHAR получил НОМЕР 00932. 00000 - "несовместимые типы данных: ожидаемый% s получил% s" , и я понимаю, что мне нужно использовать его без кавычек, но я хотел понять поведение заявления случая. SQL сервер ведет себя не так, но почему только oracle. Это oracle поведение по умолчанию с оператором case.
Если я создаю и вставляю значения, я могу сделать это безо всякой ошибки.
create table testtbl (name varchar2(50), id number(10,2));
insert into testtbl values ('abc', '123');
insert into testtbl values ('test', '200');
Когда я пытаюсь обновить столбец с помощью оператора case, я получаю эту ошибку. Я могу использовать to_number или удалить кавычки, чтобы избежать этой ошибки, но хотел понять, почему это происходит с кавычками, когда столбец, указанный в операторе else, является самим числом. Не существует неявного преобразования в Oracle?
update testtbl
set id = case when name = 'abc' then '5000' else id end;