ORA-01704:字符串文字太长错误更新Clob字段

时间:2019-01-17 18:50:17

标签: oracle sql-update

您能建议在Oracle中对Clob字段进行更新的方法吗?该查询是一个简单的查询,运行它后得到ORA-01704:字符串文字太长: 更新表名 设置clob_field = value2 其中column = condition1和clob_field = value1

范围是用新值更新clob列中的值。

谢谢

3 个答案:

答案 0 :(得分:1)

您的代码是某些PLSql过程的一部分还是简单的SQL语句?是否将变量“ value2”作为绑定变量传递或在查询中用引号引起来的字符串?您在使用12c还是Oracle DB的某些早期版本?

通常,最常见的“不明显”问题与以下事实有关:在SQL语句中varchar2类型限制为4000个字符。如果您在PLSql过程中,则限制为32K个字符。

您可以提供代码示例吗?事实是,以下两个语句导致不同的行为:

update table_name 
set clob_field=value2 
where column=condition1 
  and clob_field=value1
update table_name 
set clob_field='Some very long string.....end of very long string' 
where column=condition1 
  and clob_field='Some even longer string.....end of even longer string'

看看帖子Error : ORA-01704: string literal too long-示例如何将更新放在plsql块中以实现32.767个字符的限制。

编辑: 也来看看帖子Working with very large text data and CLOB column

答案 1 :(得分:1)

您可能知道,在Oracle数据库的clob字段中一次不能插入超过4k个字符。

解决此问题的一种解决方法是将整个字符串分成2个字符串<4k

示例:

create table t_test (id number, texte clob);
insert into t_test (id, texte) values(1, to_clob ('value of 3999 characters') || to_clob ('value of remaining 1001 characters'));

您可以使用“ Lorem ipsum”进行测试:-)

答案 2 :(得分:0)

首先将您的字符串值放入CLOB变量:

declare
   c clob;
   s varchar2(4000);
begin

    s:=rpad('x',4000,'x');
    for i in 1..100 loop
        c:=c||s;    
    end loop;
    dbms_output.put_line( dbms_lob.getlength(c) );
    -- length of "c" is 400000 now

    update table_name set clob_field=c where id=12345;

end; 
/