Oracle ORA-01704:字符串文字太长错误更新clob字段
您能否就在Oracle中更新clob字段的方法提供建议 查询是一个简单的查询,运行它我得到 范围是用新值更新clob列中的值Oracle ORA-01704:字符串文字太长错误更新clob字段,oracle,plsql,sql-update,Oracle,Plsql,Sql Update,您能否就在Oracle中更新clob字段的方法提供建议 查询是一个简单的查询,运行它我得到 范围是用新值更新clob列中的值 谢谢您的代码是某些PLSql过程的一部分还是简单的SQL语句?您是将变量“value2”作为绑定变量传递,还是在查询中将其作为带引号的字符串传递?您是使用12c还是Oracle DB的早期版本 通常,最常见的“不明显”问题与以下事实有关:在SQL语句中,varchar2类型限制为4000个字符。如果您在PLSql过程中,则限制为32K个字符 你能提供代码样本吗?事实上,以
谢谢您的代码是某些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
看一看如何在plsql块中放置更新以达到32.767字符限制的后示例
编辑:
再看看post,你的代码是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
看一看如何在plsql块中放置更新以达到32.767字符限制的后示例
编辑:
也看看post首先将字符串值放入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;
/
首先将字符串值放入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;
/
您可能知道,在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”进行测试:-)您可能知道,在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”进行测试:-)我正在使用plsqlI see。我知道您正在尝试将大于32k的字符串分配给clob值。plsql中任何长度超过32k的字符串都将引发该错误。您必须使用
dbms\u lob.append
以32k或更少的块将其分配给CLOB。看看我正在使用的plsqlI-see。我知道您正在尝试将大于32k的字符串分配给clob值。plsql中任何长度超过32k的字符串都将引发该错误。您必须使用dbms\u lob.append
以32k或更少的块将其分配给CLOB。看看这篇文章