Oracle обновит CLOB с помощью varchar
У меня есть таблица TABLENAME с типом данных COLUMNNAME CLOB. Например, он содержит только 3 строки с 1-й строкой значения COLUMNNAME, равной 123 456 789, 2-й - NULL, а 3-й - пустой строкой.
И у меня есть этот запрос
UPDATE TABLENAME
SET COLUMNNAME = COLUMNNAME || CASE
WHEN TRIM(COLUMNNAME) = '' OR COLUMNNAME IS NULL THEN
'098765'
ELSE ',098765'
END
когда я запускаю этот запрос, я получаю сообщение об ошибке ORA-00932: несоответствующие типы данных: ожидается - получил CLOB
как это исправить?
Я использую Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64 бит
1 ответ
Во-первых, TRIM(COLUMNNAME) = '' всегда будет неудачным, так как '' имеет значение NULL и не соответствует символу равенства.
Попробуйте использовать PL/SQL:
declare
v_clob clob := ',098765';
begin
update t
set val = val || v_clob
where val is not null;
--
UPDATE T
SET val = '098765'
WHERE val is null;
--
end;
/
Строковый литерал определяется как CHAR, который хорошо конвертируется в VARCHAR2, но с ошибками несовместимости, когда вы пытаетесь рассматривать его как CLOB.