informix的表、外部表和操作blob和clob示例
实验环境:
操作系统:RHEL 6U4 64bit
数据库版本:Informix 12.10.FC6X5
创建基本表tab,外部表ext,表中含有blob及clob字段。语句如下:
datafiles:指定外表部使用的文件类型,以及包含的BLOBDIR和CLOBDIR
format:指定文件的格式,这里使用DELIMITER
create table tab
(
id serial,
lobb blob,
lobc clob
);
create external table ext sameas tab
using
(
datafiles
(
"DISK:/home/informix/ext/exttab/ext.unl; BLOBDIR:/home/informix/ext/exttab/blobdir; CLOBDIR:/home/informix/ext/exttab/clobdir"
),
format "delimited",
DELIMITER "|",
rejectfile "/home/informix/ext/exttab/rej_ext.out",
maxerrors 2,
escape on
);
外部表内容ext.unl内容如下:
包含三个字段:第一个字段是序号,第二个字段是blob类型,以","为分隔符(第一个是开始位置,第二个是大小,第三个是文件名称),第三个字段是clob类型,格式也blob类型类似。
1|0,14ddc,milan.jpg|0,8,tt.unl|
2|0,f,t2.unl|0,f,t2.unl|
相应的blob及clob所含内容信息:
(为了测试需要,这里每个记录使用一个文件。如milan.jpg,大小为85468(与ext.unl中的大小14ddc对应))
[informix@rhel6u4 exttab]$ ls -l blobdir/
total 88
-rw-r--r-- 1 informix informix 85468 Dec 16 17:33 milan.jpg
-rw-rw-r-- 1 informix informix 16 Dec 16 17:34 t2.unl
[informix@rhel6u4 exttab]$ ls -l clobdir/
total 8
-rw-rw-r-- 1 informix informix 16 Dec 16 17:34 t2.unl
-rw-rw-r-- 1 informix informix 8 Dec 16 17:34 tt.unl
创建表tab及外部表ext后,可以直接将外部表ext中的数据导入到标准表tab中
insert into tab select * from ext;
对于标准表,可以通过insert插入新记录,而外部表是不允许插入新记录的。
insert into tab values(0, filetoblob("/home/informix/ext/exttab/milan.jpg","client"), filetoclob("/home/informix/ext/exttab/ext.unl","client")); -- 可插入
insert into ext values(0, filetoblob("/home/informix/ext/exttab/milan.jpg","client"), filetoclob("/home/informix/ext/exttab/ext.unl","client")); -- 不可插入
如果将标准表中的数据插入到外部表中,外部表中的数据是全部清除,并使用查询结果替代。
Database selected.
> insert into ext select * from tab;
3 row(s) inserted.
此时查看ext.unl文件的内容,可以发现blob及clob的数据导出内容在同一个文件上,只是用开始位置及大小分隔
1|0,14ddc,blob4b6a.6e2|0,8,clob4b6a.6e3|
2|14ddc,10,blob4b6a.6e2|8,10,clob4b6a.6e3|
3|14dec,14ddc,blob4b6a.6e2|18,3b,clob4b6a.6e3|
如果想将外部表的文件权限设置为只读(chmod 440 ext.unl),外部表将只读!
Database selected.
> insert into ext select * from tab;
26154: Could not open file: (file, errno)=(ext.unl,13).
Error in line 1
Near character position 32
- 上一篇: 创建OAT所需系统集成的apache+php环境
- 下一篇: informix HPL导入失败