你好,游客 登录 注册 搜索
背景:
阅读新闻

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

[日期:2014-01-22] 来源:Linux社区  作者:snans [字体: ]

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

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;

更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

linux
相关资讯       Oracle CLOB 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款