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

18

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

--create test table s
create table s
(
      a clob
);
insert into s values('>4000 char')

出现错误:

ORA-01704:字符串太长。

我想一次插入一个超过4000个字符的字符串。怎么办?这可能吗?

当我阅读 Oracle 参考时,CLOB 可以保存最大4GB(千兆字节)?


2
你找到了最好的方法来做这件事了吗? - TuGordoBello
3个回答

21
  • 将长字符串分割成4000个字符或更少的块
  • 使用to_clob()函数为每个块创建clob
  • 连接这些clobs

以下是一个示例:

insert into <table> (clob_column)
  values
  (
      to_clob(' <=4000 symbols ')
    ||to_clob(' <=4000 symbols ')
    ||to_clob(' <=4000 symbols ')
    ...
    ||to_clob(' <=4000 symbols ')
  );

2
这个四年前的问题已经有了一个被接受的答案(也是四年前的)。未来参考,请考虑添加更多的解释,比如你的代码是如何工作的。 - TheJim01
2
你错了,@TheJim01是正确的(并不是在恶意挑衅)。所有答案都需要解释,我认为任何答案的解释比代码本身更重要。 - Hovercraft Full Of Eels
6
是的,这个问题几年前就有了被接受的答案。不过,@gunn提供了另一种方法,我认为更容易。我之前也需要OP所问的内容,并喜欢这个答案。我理解评论者们的观点,但是不能将这个答案保持原样,所以进行了编辑。 - burkay
尽管已批准的评论是适用的,但无论如何这对我来说都完美地解决了问题,你帮我省去了一些麻烦 :) - Koshux
尽管这个批准的评论是适用的,但无论如何对我来说都非常完美,你帮我省了些麻烦 :) - undefined
Oracle是我曾经使用过的最糟糕的数据库,它常常会让一个非常简单的任务变得复杂! - Michele

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;

3
谢谢您的示例,但我该如何插入像这样的XML呢?这里我只粘贴了一部分,原始大小超过4000字节。<?xml version="1.0"?> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer''s Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> </catalog> 如何制作不同的块。我对Oracle中的XML知之甚少,请帮忙。 - redsoxlost

-3

使用列并使用sqlldr从csv导入数据。

sqldeveloper可以为您生成必要的control .ctl脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接