智能大对象简介
智能大对象是支持对数据进行随机访问并且通常可恢复的一类大对象。
随机存取功能允许您查找和读取智能大对象,就好像它是操作系统文件一样。
智能大对象对于具有大量存储器需求的不透明数据类型也很有用,它们具有2^42个字节的理论大小限制和磁盘容量确定的实际限制。
GBase 8s 支持下列智能大对象数据类型:
BLOB:存储二进制数据。
BLOB数据类型是以随机存取块的形式存储任何种类的二进制数据。二进制数据通常由已保存的电子表格,程序装入模块和数字化声音模式等等组成。
BLOB列最长可为2^42个字节,不过系统资源可能会强加较低的实际限值,分配给智能大对象数据类型的最小磁盘空间量为512字节。
CLOB:存储文本数据。
CLOB数据类型以随机存取块的形式存储任何种类的文本数据。如果此信息也是文本的(例如,PostScript、“超文本标记语言”(HTML)、“标准图形标记语言”(SGML)、“可扩展标记语言”(XML)数据),那么文本数据也包括文本格式的信息。
GBase 8s 将智能大对象存储在智能大对象空间中。智能大对象空间是包含只存储BLOB和CLOB数据的一个或多个块的逻辑存储器区域。
智能大对象函数
数据库服务器提供了四个SQL函数,您可以从SQL语句中调用这些函数来导入和导出智能大对象。下表显示智能大对象函数。
函数名称 | 用途 |
---|---|
FILETOBLOB() | 将文件复制到BLOB列中 |
FILETOCLOB() | 将文件复制到CLOB列中 |
LOCOPY() | 将BLOB或CLOB数据复制到另一个BLOB或CLOB列中 |
LOTOFILE() | 将BLOB或CLOB数据复制到文件中 |
用法示例
新建三个表
create table test_blob (id int,coll_blob blob);
create table test_clob (id int,coll_clob clob);
create table test_copy (id int,coll clob);
在/opt/test下新建三个文件
touch test_blob.txt test_clob.txt test_copy.txt
在三个文件中写入内容,内容自定义。
FILETOBLOB() 用法:
insert into test_blob values(1,FILETOBLOB('/opt/test/test_blob.txt','client'));
select * from test_blob;
这里查询出来的数据和文本的数据不一样,因为存储的是二进制数据,不直接显示出来。
FILETOCLOB()用法:
insert into test_clob values(1,FILETOCLOB('/opt/test/test_clob.txt','client'));
select * from test_clob;
这里看到表test_clob中存储的数据和上述文件test_clob.txt中的一样。
LOCOPY()用法:
select * from test_copy;
insert into test_copy values(1,FILETOCLOB('/opt/test/test_copy.txt','client'));
select * from test_copy;
update test_copy set coll = (select LOCOPY(coll_clob,'test_clob','coll_clob') from test_clob where id = 1) where id = 1;
select * from test_copy;
表test_copy先存储的是文件test_copy.txt中的内容,后面通过LOCOPY将表test_clob中的内容拷贝到表test_copy中。
LOTOFILE()用法:
select id,LOTOFILE(coll_blob,'/opt/test/coll_blob.txt','client') from test_blob where id = 1;
select id,LOTOFILE(coll_clob,'/opt/test/coll_clob.txt','client') from test_clob where id = 1;
这里可以看到通过LOTOFILE()可以将表中智能大对象的内容拷贝到相应的文件中。