您能建议在Oracle中对Clob字段进行更新的方法吗?该查询是一个简单的查询,运行它后得到ORA-01704:字符串文字太长: 更新表名 设置clob_field = value2 其中column = condition1和clob_field = value1
范围是用新值更新clob列中的值。
谢谢
答案 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个字符的限制。
答案 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;
/