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

时间:2013-08-23 04:24:46

标签: oracle insert clob

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

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

导致错误:

  

ORA-01704:字符串太长了。

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

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

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

以下是一个例子:

var remark = "";         
                var dateofentry = moment(new Date(parseInt(item.DateOfEntry.substr(6)))).format('MMM D, YYYY');
                var dateofentry6mos = moment(dateofentry).add(6, 'months').format('MMM D, YYYY');
                var dateofentry12mos = moment(dateofentry).add(1, 'year').format('MMM D, YYYY');
                var CurrentDate = moment().format('MMM D, YYYY');




                for (var m = moment(CurrentDate) ; m.isBefore(dateofentry6mos) ; m.add(1, 'days'))


                {                    
                    remark = ("<td style='text-align:left;'>" + "Reached <span style='color:#014da2;font-weight:bold;'>" + m.format('M') + "</span>" + " months and " + m.format('D') + " days today " + "</td>");
                }

答案 2 :(得分:0)

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

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