InterBase与FireBird外部文件(外部表)的使用
2007-02-27 09:55
232 查看
参考《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"参数,在备份中,原来所有的外部表将转为内部表。恢复后,外部表的定义也被清除。
概述:
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"参数,在备份中,原来所有的外部表将转为内部表。恢复后,外部表的定义也被清除。
相关文章推荐
- 【跟我学spring 4.0 】之第七节-spring使用外部属性文件-spring配置连接oracle数据库
- 如何在VC++6.0或者VS如VS2010下使用外部类库(其他头文件)比如用pthread.h这个头文件
- Spring4 学习系列之——使用外部属性文件
- 如何在Jmeter中使用外部的java文件
- Assets的使用,外部sql文件,并显示在listview中
- LoadRunner中添加外部文件(md5.h),使用MD5
- How to:如何在调用外部文件时调试文件路径(常见于使用LaunchAppAndWait和LaunchApp函数)
- Mybatis在非spring环境下配置文件中使用外部数据源(druidDatasource)
- Spring基础:使用外部属性文件
- Firebird/InterBase内置函数使用说明
- VC中 使用外部的lib,dll,头文件
- C++使用static的错误:无法解析的外部符号、“static”不应在文件范围内定义的成员函数上使用
- 外部属性文件的使用
- 通过fuse使greenplum外部表能使用HDFS上的文件
- javascript使用外部文件
- 使用Oracle外部表对大文件排序
- 使用API获取内部存储文件的路径;外部存储
- 《精通Spring4.X企业应用开发实战》读后感第六章(使用外部属性文件)
- CMake学习笔记(4)——使用外部共享库和头文件
- C++中使用pthread.h头文件报错 - 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用