外部表
1外部表是可以读取存储在操作系统下,文件系统中的数据的一种只读表
2外部表的数据可以存储在oracle数据库外部的操作系统文件中,oracle数据库可以读取这些数据,但是不能修改。
3使用oracle的外部表可以很容易的将一个格式化的文本文件虚拟成数据库的表,并且可以使用select语句去访问。
创建外部表
案例
create table student5(
id NUMBER(5),
name VARCHAR(12),
sex VARCHAR(8),
age NUMBER(3),
grand NUMBER(1)
)organization external(
type oracle_loader
default directory external_student
access parameters(
fields terminated by ‘,’ )
location (‘student.csv’)
);
organization external:用来设置外部表的选项
type :指定访问外部表数据文件时,所使用的访问区段程序。这个区段程序可以将文件格式转换为服务器可以接受的格式
oracle_loader:访问区段程序,默认使用这个
default directory:指定访问目录,告诉数据库外部文件存放的位置
external_student:目录名
access parameters:指定区段程序访问外部数据文件时,进行转换的参数设置。
fields terminated by:制定分割符
location :指定访问的文件
创建外部表步骤
1创建外部文件
2创建文件目录
create directory external_student as ‘F:\test\externalTable’;
3创建表
create table student5(
id NUMBER(5),
name VARCHAR(12),
sex VARCHAR(8),
age NUMBER(3),
grand NUMBER(1)
)organization external(
type oracle_loader
default directory external_student
access parameters(
fields terminated by ',' )
location ('student.csv')
);
问题
SQL> select * from student5;
select * from student5
*
第 1 行出现错误:
ORA-29913: 执行 ODCIEXTTABLEFETCH 调出时出错
ORA-30653: 已达到拒绝限制值
解决
建表最后添加 reject limit unlimited;
create table student5(
id NUMBER(5),
name VARCHAR(12),
sex VARCHAR(8),
age NUMBER(3),
grand NUMBER(1)
)organization external(
type oracle_loader
default directory external_student
access parameters(
fields terminated by ',' )
location ('student.csv')
)
reject limit unlimited;
验证
SQL> select * from student5;
未选定行
解决:表的数据结构不对
student.csv修改为这样
1,lia,男,16,1001
2,lib,男,17,1001
3,lic,男,18,1001
4,lid,男,19,1001
5,lie,男,20,1001
验证
SQL> select * from student5;
未选定行
解决:
因为 grand NUMBER(1),所以我们将1001改为1
验证
select * from student5;
ID NAME SEX AGE GRAND
------ ------------ -------- ---------- ----------
1 lia 男 16 1
2 lib 男 17 1
3 lic 男 18 1
4 lid 男 19 1
5 lie 男 20 1