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> /
阅读(2183) | 评论(0) | 转发(0) |