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

标签: none

添加新评论

Free Web Hosting