oracle为我们提供了管理外部文件的方法,即改文件不占据数据库的空间实际上是在OS文件系统中存在的,因此对于外部表不能建表定义以外的任何东西,包括索引,主键,约束等等,因为这些是要占据数据库存储空间的。
建立外部表主要分三步操作:
1.建立目录
CREATE OR REPLACE DIRECTORY dir_ext_table AS 'E:/外部表';
2.授予权限,如果是当前用户不用授于读写权限,因为要在该目录下生成log文件,读当然就不用说了。
GRANT READ ,WRITE ON DIRECTORY dir_ext_table TO scott;
这里假设当前用户不是scott,否则会报错,不能给自己grant or revoke 。
3.建表:
CREATE TABLE t_ext_telebook(NAME VARCHAR2(20),tele_number VARCHAR2(100))
ORGANIZATION external(
TYPE oracle_loader DEFAULT DIRECTORY dir_ext_table
ACCESS PARAMETERS(
RECORDs delimited BY NEWLINE
fields terminated BY ','
missing field VALUES are NULL(NAME,tele_number)
)
LOCATION('telebook.txt')
);
4.后期更改:
4.1 修改该外部表的默认工作目录:
alter table t_ext_telebook default directory new_directory;
4.2 修改字段的分隔字符:
alter table t_ext_telebook access parameters(fields terminated by ';');
4.3 修改加载文件列表:
alter table t_ext_telebook location('telebook.txt','telebook2.txt');
注意这里要求列表中的文件具有完全相同的的组织格式。
5. 附加:
我的telebook的文件的内容是这样组织的:
谢龙,1590339346012
黄云增,1590339679565
6.常见问题:
6.1 外部文件不建议有表头,因为外部表会认为表头是一条记录,如果存在表头,但是表头不是按指定格式组织的话,在查询时会报错。
6.2 注意你定义的外部表的各个字段的长度,如果你在OS中的文件的某一个字段大于在数据库中定义的字段,同样会报错。
6.3 如果不知道是什么原因造成的错误,到操作系统对应目录下查看日志文件相信会有所帮助。