Oracle CLOB无法插入超过4000个字符?

Dol*_*hin 8 oracle insert clob

如何在CLOB类型列中插入超过4000个字符?

--create test table s
create table s
(
      a clob
);
insert into s values('>4000 char')
Run Code Online (Sandbox Code Playgroud)

导致错误:

ORA-01704:字符串太长了.

当我想一次插入> 4000的字符串时,该怎么办?有可能吗?

当我阅读Oracle参考时,CLOB可以节省最多4GB(技嘉)?

Raú*_*rez 7

一次插入的最大值为4000个字符(Oracle中的最大字符串文字).但是,您可以使用lob函数dbms_lob.append()将(最多)4000个字符的块附加到clob:

CREATE TABLE don (x clob);


DECLARE 
 l_clob clob;
BEGIN
  FOR i IN 1..10
  LOOP
    INSERT INTO don (x) VALUES (empty_clob()) --Insert an "empty clob" (not insert null)
    RETURNING x INTO l_clob;

    -- Now we can append content to clob (create a 400,000 bytes clob)
    FOR i IN 1..100
    LOOP
      dbms_lob.append(l_clob, rpad ('*',4000,'*'));
      --dbms_lob.append(l_clob, 'string chunk to be inserted (maximum 4000 characters at a time)');
    END LOOP;
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的示例,但是如何插入这样的xml,我只粘贴了一部分,原始的是> 4000字节<?xml version =“ 1.0”?> <catalog> <book id =“ bk101 “> <author> Gambardella,Matthew </ author> <title> XML开发人员指南</ title> <genre>计算机</ genre> <price> 44.95 </ price> <publish_date> 2000-10-01 < / publish_date> <description>深入了解如何使用XML创建应用程序。</ description> </ book> </ catalog>如何制作不同的块。我对oracle中的xml知之甚少。请帮忙。 (2认同)

小智 7

  • 将长字符串分成4000个字符或更少的块
  • 使用to_clob()函数为每个块创建块
  • 串联衣橱

这是一个例子:

insert into <table> (clob_column)
  values
  (
      to_clob(' <=4000 symbols ')
    ||to_clob(' <=4000 symbols ')
    ||to_clob(' <=4000 symbols ')
    ...
    ||to_clob(' <=4000 symbols ')
  );
Run Code Online (Sandbox Code Playgroud)

  • 这个已有四年历史的问题已经有了一个公认的(也是四年历史)答案。另外,为了将来参考,请考虑添加不仅仅是代码,例如有关代码工作方式的说明。 (2认同)
  • 你错了,@TheJim01 是正确的(而不是拖钓)。所有答案都需要解释,我会说任何答案的解释都比代码*更*重要。 (2认同)
  • 是的,几年前这个问题得到了公认的答案。但是,@ gunn提供了另一种方法,恕我直言。我还需要OP提出的要求,并且更喜欢这一要求。我看到了评论员的观点,但不能原样保留此答案,因此编辑了答案。 (2认同)