Chinaunix首页 | 论坛 | 博客
  • 博客访问: 197601
  • 博文数量: 35
  • 博客积分: 656
  • 博客等级: 上士
  • 技术积分: 543
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-25 10:22
文章分类

全部博文(35)

文章存档

2018年(3)

2015年(1)

2013年(8)

2012年(12)

2011年(11)

我的朋友

分类: Oracle

2012-04-17 16:57:45

Oracle LOB数据对象浅析

    Oracle提供了关于大数据对象的数据支持,可以将大量数据作为数据表字段存储在数据库内或者以文件的形式存储在数据库外,但数据库中存在描述改文件的元数据。

一、Oracle中的LOB数据类型分类

    1、根据存储数据的类型

    字符型:CLOB,NCLOB

        CLOB:用来存放数据库字符集数据,最大可以存放8 terabytes字节的数据;

        NCLOB:用来存放unicode国家字符集数据,最大同样可以存放8 terabytes字节的数据;

    二进制类型数据:BLOB
       
        BLOB: 用来存储无结构化的二进制数据,最大8 terabytes;

    二进制文件类型:BFILE
        
        BFILE: 以操作系统文件作为存在形式的存储于数据库外面的数据类型;最大8 Terabytes;

     2.根据存放位置
       存放在数据库内部: CLOB,NCLOB,BOLB

       存放在数据库外部: BFILE

二、LOB对象的简单操作

    实验环境创建:
    SYS@orcl10g> Create  tablespace  tbs_lob  datafile 
      2>  '/u01/app/oracle/oradata/orcl10g/tbs_lob01.dbf'  size 200m;
     //创建一个实验用的表空间
    SYS@orcl10g> alter  user scott quota unlimited on tbs_lob;
     //授权scott用户可以使用改表空间
    SYS@orcl10g> create  directory  myfile  as '/u01/app/oracle/myfile';
     //创建一个directory对象;
    SYS@orcl10g> grant  read,write on directory myfile to scott;
     //授权scott用户可以读写改目录对象;

    1.创建一个包含LOB对象的表

     SYS@orcl10g> conn  scott/tiger;

    SCOTT@orcl10g> create  table  t_lob (
      2>  id number(4),
      3>  name  varcahr2(10),
      4>  resume  clob,
      5>  photo   blob,
      6>  record  bfile)
      7>  lob(resume,photo)  storage as ( 
      8>  tablespace tbs_lob  
      9>  disable storage in row);

      //当你的表中出现lob数据类型的时候,要用lob子句来对表加以说明
      // storage as 指定lob对象存储的表空间
      

    2.出入lob数据对象时需要用到的函数
  
      empty_clob(): 初始化CLOB类型的大对象数据,返回一个空指针;
      empty_blob(): 初始化BLOB类型的大对象数据,返回一个空指针;

      bfilename('目录对象','文件名'):指定一个bfile对象的数据;

    3.插入数据样例语句

      SCOTT@orcl10g>  insert  into  t_lob  values(1,'neves',empty_clob(),empty_blob(),
        2> bfilename('MYFILE','record.txt'));

      SCOTT@orcl10g> insert into t_lob values(2,'seven','BIG OBJECT AND TEST',empty_blob(),
        2> bfilename('MYFILE','record.txt'));
三、使用DBMS_LOB包操作大对象数据

      SCOTT@orcl10g>  desc  dbms_lob;
      //查看dbms_lob包所包含的procedure 和 function

    1.dbms_lob.read()
      DBMS_LOB.READ (
lob_loc IN BLOB,
amount IN OUT NOCOPY BINARY_INTEGER,
offset IN INTEGER,
buffer OUT RAW); 
DBMS_LOB.READ ( lob_loc IN CLOB CHARACTER SET ANY_CS, amount IN OUT NOCOPY BINARY_INTEGER, offset IN INTEGER, buffer OUT VARCHAR2 CHARACTER SET lob_loc%CHARSET); DBMS_LOB.READ ( file_loc IN BFILE, amount IN OUT NOCOPY BINARY_INTEGER, offset IN INTEGER, buffer OUT RAW);   //根据指定大小和偏移量,将lob对象读入缓冲区,保存在给定参数的缓冲区内; SCOTT@orcl10g> declare 2> varc clob; 3> vrstr varchar2(1000); 4> length number(4); 5> startnum number(4); 6> begin 7> select resume into varc from t_lob where id=2; 8> length:=dbms_lob.getlength(varc); 9> startnum:=1; 10> dbms_lob.read(varc,length,startnum,vrstr); 11> dbms_output.put_line(vrstr); 12> end; 13> /
    


阅读(2177) | 评论(0) | 转发(0) |
0

上一篇:su&sudo

下一篇:runstats -- Tom's great tools

给主人留下些什么吧!~~