oracle中的大对象BLOB,CLOB,BFILE

BLOB:二进制lob类型,用于存储二进制数据。无法在sqlplus中显示。
CLOB:字符lob类型,用于存储字符数据。
BFILE:二进制file类型,用于存储文件指针,这些文件位于文件系统中。无法在sqlplus中显示。
NCLOB:国家语言字符lob类型,用于存储多字节字符数据(通常用于非英语字符)。

1.BLOB,CLOB
a.建立表

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> create table clob_content(
2 id int primary key,
3 clob_column clob not null);

表已创建。

SQL> create table blob_content(
2 id int primary key,
3 blob_column blob not null);

表已创建。

SQL> create table bfile_content(
2 id int primary key,
3 bfile_column bfile not null);

表已创建。

b.在向lob列插入数据之前必须利用empty_clob(),empty_blob()来初始化lob列。

SQL> insert into clob_content(
2 id,clob_column)
3 values(1,empty_clob());

已创建 1 行。

1 update clob_content set clob_column='creeps in this petty pace'
2* where id=1
SQL> /

SQL> select * from clob_content;


        ID
----------
CLOB_COLUMN
--------------------------------------------------------------------------------

         1
creeps in this petty pace


SQL> insert into blob_content(
2 id,blob_column)
3 values(1,empty_blob());

已创建 1 行。

SQL> update blob_content set blob_column=
2 '100111010101011111' where id=1;

已更新 1 行。

c.sqlplus不能显示blob类型的数据,但是可以在pl/sql中访问,后面学习这部分内容。

SQL> select * from blob_content;
SP2-0678: 列或属性类型无法通过 SQL*Plus 显示
SQL>

2.BFILE
BFILE LOB类型可以存储指向文件的指针,这些文件可以通过计算机的文件系统访问。也就是说这些文件位于数据库之外。

a.创建目录对象
在存储bfile列指针之前,必须先在数据库中创建一个目录对象,他表示文件在文件系统中的存储目录。创建之前确保拥有CREATE ANY DIRECTORY权限。

SQL> create or replace directory sample_files_dir as 'd:\sample_files';

目录已创建。

b.用文件指针填充bfile列
利用函数BFILENAME(),就可以用外部文件的指针填充bfile列。
BFILENAME(dir_name,file_name)

SQL> insert into bfile_content(id,bfile_column)
2 values(1,bfilename('sample_files_dir','textcontent.txt'));

已创建 1 行。

bfile列不限制文件的存储格式。

SQL> select * from bfile_content;
SP2-0678: 列或属性类型无法通过 SQL*Plus 显示
SQL>
同样的bfile在sqlplus 中和blob一样也无法显示。但是可以通过pl/sql来访问。

 

在Oracle的SQLPLUS下显示CLOB中的内容

create table a (content clob);

select content from a;

显示的内容为cotent中的部分内容和乱码,因为a是clob类型,不能直接从select的结果中显示出来,需要借用Oracle系统的包dbms_lob来处理,才能正确显示出来content的内容。

select dbms_lob.substr(content) from a;

这样就能把content中的内容打印输出来了,不过你会发现输出的内容可能不全面。

那是因为sqlplus环境变量值限制了输出格式。可以通过set来设置来实现。

set heading off 不输出结果第一行的标题 (字段名称)

set long 40000  设置输出的字节数(比较大数)

再重新执行上面的SQL语句即可。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值