Oracle различия с использованием кавычек в выписке и вставке - PullRequest
1 голос
/ 14 февраля 2020

Я сталкивался с таким сценарием, когда вставка, основанная на столбце '' 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;

1 Ответ

1 голос
/ 14 февраля 2020

Не существует ли неявное преобразование в Oracle?

. См. Документацию, например здесь .

Это oracle поведение по умолчанию с оператором case.

Да. Из документации :

Для простых и искомых выражений CASE все return_exprs должны иметь одинаковый тип данных (CHAR, VARCHAR2, NCHAR или NVARCHAR2, NUMBER, BINARY_FLOAT или BINARY_DOUBLE) или все должны иметь числовой тип c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...