Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle ORA-01704:字符串文字太长错误更新clob字段_Oracle_Plsql_Sql Update - Fatal编程技术网

Oracle ORA-01704:字符串文字太长错误更新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个字符 你能提供代码样本吗?事实上,以

您能否就在Oracle中更新clob字段的方法提供建议

查询是一个简单的查询,运行它我得到

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


谢谢

您的代码是某些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。看看这篇文章