Oracle使用varchar更新CLOB

时间:2010-11-03 04:21:25

标签: sql oracle oracle10g ora-00932

我有一个表 TABLENAME COLUMNNAME 数据类型为 CLOB 。例如,它只包含3行第1行 COLUMNNAME 123,456,789 第2 NULL 第三空字符串

我有这个查询

UPDATE TABLENAME
   SET COLUMNNAME = COLUMNNAME || CASE 
                                    WHEN TRIM(COLUMNNAME) = '' OR COLUMNNAME IS NULL THEN  
                                         '098765'
                                    ELSE ',098765'
                                  END

当我运行此查询时,我收到错误消息 ORA-00932:数据类型不一致:预期 - 获得CLOB

如何解决?

我使用的是Oracle数据库10g企业版10.2.0.1.0版 - 64位

1 个答案:

答案 0 :(得分:2)

首先,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,当您尝试将其视为CLOB时,它可以很好地转换为VARCHAR2,但是通过不兼容性错误。