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.

Другие вопросы по тегам