Oracle обновит CLOB с помощью varchar - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть таблица 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 Ответ

2 голосов
/ 03 ноября 2010

Во-первых, 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.

...