blogger

    blogger
  • hot log

  • comment

    twitter

    • 12.10.xC6出来时候碰到"Could not determine encryption mode from page zero",竟果然是BUG!http://www-01.ibm.com/support/docview.wss?rs=630&uid=swg21973408

      2015-12-21 20:15

    • 空间已经转移到新加坡,希望会好一些。

      2015-11-16 14:34

    • 增加新域名liaosnet.cc,与liaosnet.com同指向。

      2015-10-09 15:25

    • 空间迁移到香港。或许速度会快一点。。

      2014-02-13 20:10

    • 解决个问题:NBU配置Storage时的目录在系统分区上,导致备份失败,最终原因是目录在系统分区上时,需要在 This directory can exist on the root file system or system disk. 这个选项前打上勾。

      2012-09-26 22:21

    • More»

    blog sort

    links

    record

    banner

    informix的表、外部表和操作blob和clob示例

    暗夜星空's Memory from Dec 22 , 2015 at 16:13 PM , under Category:INFORMIX教程
    实验环境:
    操作系统: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

    Post a comment:

    Your email address will not be published. Required fields are marked﹡