栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Informix上的磁盘上写入二进制Blob

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Informix上的磁盘上写入二进制Blob

数据存储在BYTE或BLOB字段中吗?

如果数据存储在BLOB列中,则可以使用:

SELECt LOTOFILE(blob_column, '/path/to/file/on/client', 'client')  FROM TheTable WHERe PK_Column = 23411   -- PK value

如果数据存储在BYTE列中,则您必须付出更大的努力。如果您的计算机上装有ESQL /
C(ClientSDK)和C编译器,则建议从IIUG软件档案库中获取SQLCMD并解压缩该软件。您需要Informix环境集,并且需要能够编译C程序。然后运行:

./configure --prefix=$HOME/bin

您指定作为前缀没有什么关系-您只需要运行configure脚本即可。

然后,您可以编译所有内容(

make
),也可以简单地编译程序
selblob
make selblob
)。这个程序就是我所说的“
vignette”。一个微观程序,显示如何选择BYTE blob到磁盘。但是,它也具有全部功能。它几乎可以与您扔给它的任何东西一起工作,或者诊断出错误。

如果您的数据库被调用

precious
,字节数据在一个表中
byte_table
,保存该数据的列是
byte_column
,并且主键列是
col1
(并且所需的值为
23
)和
col2
(并且所需的值为
"HabeasCorpus"
),那么可以运行:

selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus"         -c byte_column -f output_file

这会将字节值卸载到命名文件中。

如果您没有ESQL / C或C编译器或使用它们的权限,那么生活会更加困难。最接近的方法是在DB-Access中使用UNLOAD语句:

dbaccess precious - <<!unload to "output_file"select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus';!

这将创建一个文件,其中包含字节值的十六进制转储(每个字符2个字节)。然后,您需要对文件进行后处理,以将十六进制转换为常规数据。请注意,如果该列是TEXT列而不是BYTE列,则不需要转换。您可以使用一个相当简单的Perl脚本来进行转换(只要文件足够小,可以将其拖入内存中-
如果文件不够小,则必须更加努力地工作):

perl -w -e '    $/ = "";    my $data = <>;    while (length($data) > 1)    {        my $hex = substr($data, 0, 2);        printf "%c", hex($hex);        $data = substr($data, 2);    }' <output_file

长度条件指定“

> 1
”以在卸载的数据末尾处理换行符。

尽管IDS9.00引入了“智能blob”的显式名称BLOB和CLOB,但它们对数据类型略有不同,我仍将BYTE和TEXT称为“ blob类型”。大致相应的功能-
在我的书中,它们都是blob(小写)类型,这是1990年了解BYTE和TEXT blob的老家伙的麻烦,而在添加BLOB和CLOB
blob之前已有六年或更长时间。的情况下,对于较旧的Blob,没有一个很好的替代官方术语;使用“哑巴Blob”在政治上是不正确的!)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号