oracle里大数据保存至CLOB解决方法

    如果数据太大,我们无法对clob变量直接赋值,这时我们可以通过dbms_lob.readdbms_lob.write方法分阶段的读取和写入clob变量内。但这时我们应该对clob变量建立缓存,如下的第一句。这里给出一个示例程序,可以通过变换dbms_lob.readdbms_lob.write顺序使程序不仅能写入大数据还能读取大数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
dbms_lob.createtemporary(lob_loc => x_clob,
                              cache   => TRUE );
PROCEDURE load_clob(p_clob_in IN CLOB,
                       x_clob    IN OUT NOCOPY CLOB) IS
     
     l_clob_len NUMBER := dbms_lob.getlength(p_clob_in);
     l_data VARCHAR2(32756);
     l_buf_len_std NUMBER := 4000;
     l_buf_len_cur NUMBER;
     l_seg_count   NUMBER;
     l_write_offset NUMBER;
   BEGIN
     IF p_clob_in IS NOT NULL THEN
       l_seg_count := floor(l_clob_len / l_buf_len_std);
       FOR i IN 0 .. l_seg_count
       LOOP
         
         IF i = l_seg_count THEN
           l_buf_len_cur := l_clob_len - i * l_buf_len_std;
         ELSE
           l_buf_len_cur := l_buf_len_std;
         END IF;
         
         IF l_buf_len_cur > 0 THEN
           dbms_lob. read (lob_loc => p_clob_in,
                         amount  => l_buf_len_cur,
                         offset  => i * l_buf_len_std + 1,
                         buffer  => l_data);
           l_write_offset := nvl(dbms_lob.getlength(lob_loc => x_clob),
                                 0) + 1;
           dbms_lob.write(lob_loc => x_clob,
                          amount  => l_buf_len_cur,
                          offset  => l_write_offset,
                          buffer  => l_data);
         END IF;
       END LOOP;
     END IF;
   END load_clob;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值