InterBase与FireBird外部文件(外部表)的使用

 参考《The FireBird book》281页至287页后整理,和TR的《基于Interbase的数据库开发》关于外部表的小节讲的基本一样。

概述:

1、FB支持读取和操作ascII文本格式作为外部表;外部表只能select和insert,不能update和delete;可以吧外部表转换成内部表;操作外部表不受版本控制,插入数据后不能rollback;DROP DATABASE不会自动删除已经创建的外部表,必须手动删除。
2、创建外部表:
CREATE TABLE EXT_TBL_NAME
EXTERNAL FILE filespec
(columndef [,columndef,...],
[line_delimiter_1 CHAR(1)
[, line_delimiter_2 CHAR(1)]]);
3、在 firebird.conf (for v. 1.5 servers) 中配置ExternalFileAccess参数存取外部表
4、格式:外部表不支持blob和array;不推荐使用varchar;注意要包含一个列作为换行符,windows下一般要2字节,unix下一般是1个字节

导入外部文件到FB:
1、所有的列都为char,文本文件必须在服务器上:
CREATE TABLE EXT_TBL EXTERNAL FILE 'file.txt' (
FNAME CHAR(10),
LNAME CHAR(20),
HDATE CHAR(10),
NEWLINE CHAR(2));
COMMIT;
注意现在假设在windows下,所以换行符NEWLINE CHAR(2)为两个字节
2、创建FB表,为了让这个表和外部表执行相关操作,也包含一个单独的列存储换行符:
CREATE TABLE PERSONNEL (
FIRST_NAME VARCHAR(10),
LAST_NAME VARCHAR(20),
HIRE_DATE DATE,
NEW_LINE CHAR(2));
COMMIT;
3、使用文本编辑器,或者其他应用程序输出为指定格式的文本文件,让没一条记录都有相同的长度,没有用到的空格补上,比如:
123456789012345678901234567890123456789012
fname.....lname...............hdate.....n
JamesbbbbbStarkeybbbbbbbbbbbbb2004-12-10n
ClaudiobbbValderramabbbbbbbbbb2003-10-01n
每行42个字符,其中b代表补的空格,n是换行符
4、执行选择语句看看效果:
SELECT FNAME, LNAME, HDATE FROM EXT_TBL;
FNAME LNAME HDATE
========= =================== ===========
James   Starkey       2004-12-10
Claudio  Valderrama     2003-10-01
5、插入外部数据到表里:
INSERT INTO PERSONNEL
SELECT FNAME, LNAME, CAST(HDATE AS DATE),
NEWLINE FROM EXT_TBL;
COMMIT;
再看看效果:
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM PERSONNEL;
FIRST_NAME LAST_NAME     HIRE_DATE
========== ================== ===========
James   Starkey       10-DEC-2004
Claudio  Valderrama     01-OCT-2003
搞定!
注意:执行刚才的插入操作时FB需要独占外部表文件,故如果已经有程序打开了文本文件,插入会失败。

从数据库中导出数据到外部文件:执行和刚才相似的操作过程。
1、清空要导出的文本文件。
2、
INSERT INTO EXT_TBL
SELECT FIRST_NAME, LAST_NAME,
cast(HIRE_DATE AS VARCHAR(11),
ASCII_CHAR(10)
FROM PERSONNEL
WHERE FIRST_NAME LIKE 'Clau%';
3、查询外部表:
SELECT FNAME, LNAME, HDATE FROM EXT_TBL;
FNAME   LNAME        HDATE
========== ==================== ===========
Claudio  Valderrama      01-OCT-2004
注意:操作完成后要释放外部文件,ASCII_CHAR() 函数在ib_udf里。

转换外部表为内部表:
通过使用 gbak 加上¨-convert"参数,在备份中,原来所有的外部表将转为内部表。恢复后,外部表的定义也被清除。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值