错误:ORA-01704:字符串文字太长

时间:2012-12-19 04:50:21

标签: oracle codeigniter clob nclob

当我尝试在数据类型为CLOB的字段上设置超过4000个字符的值时,它会给我这个错误:

  

ORA-01704:字符串文字太长。

任何建议,如果我必须设置无限字符的值,哪种数据类型适用于我,尽管对于我的情况,它恰好是大约15000个字符。

注意:我尝试存储的长字符串是用ANSI编码的。

5 个答案:

答案 0 :(得分:42)

使用CLOB时使用了什么?

在所有事件中,您都可以使用PL / SQL

来完成
DECLARE
  str varchar2(32767);
BEGIN
  str := 'Very-very-...-very-very-very-very-very-very long string value';
  update t1 set col1 = str;
END;
/

Proof link on SQLFiddle

答案 1 :(得分:23)

尝试将字符拆分为多个块,如下面的查询,然后尝试:

Insert into table (clob_column) values ( to_clob( 'chunk 1' ) || to_clob( 'chunk 2' ) );

它对我有用。

答案 2 :(得分:2)

分割工作直到4000个字符,具体取决于您插入的字符。如果要插入特殊字符,则可能会失败。 唯一安全的方法是声明一个变量。

答案 3 :(得分:0)

要解决这一问题,我必须使用已经在此处提出的组合

DECLARE
  chunk1 CLOB; chunk2 CLOB; chunk3 CLOB;
BEGIN
  chunk1 := 'very long literal part 1';
  chunk2 := 'very long literal part 2';
  chunk3 := 'very long literal part 3';

  INSERT INTO table (MY_CLOB)
  SELECT ( chunk1 || chunk2 || chunk3 ) FROM dual;
END;

希望这会有所帮助。

答案 4 :(得分:-1)

INSERT INTO table(clob_column) SELECT TO_CLOB(q'[chunk1]') || TO_CLOB(q'[chunk2]') ||
            TO_CLOB(q'[chunk3]') || TO_CLOB(q'[chunk4]') FROM DUAL;