外部表,是指不存在于数据库中的表。通过向Oracle提供描述外部表的元数据,我们可以把一个操作系统文件(如EXCEL、CSV、DAT或TXT文件)当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问。外部表是对数据库表的延伸。
1、使用sys用户建立逻辑目录,并给指定的用户授予权限。
(要有对操作系统中该目录的读写权限,直接使用scott用户建立,提示权限不足):
SQL> create directory testDir1 as ‘D:\oracletest\testDir‘; Directory created ====授权 SQL> grant read on directory testDir1 to scott; Grant succeeded SQL> grant write on directory testDir1 to scott; Grant succeeded
===============
2、准备数据文件:
将测试数据文件testEmp.txt文件放在D:\oracletest\testDir目录下。文件内容:
7369 SMITH CLERK 7499 ALLEN SALESMAN 7521 WARD SALESMAN 7566 JONES MANAGER 7654 MARTIN SALESMAN 7698 BLAKE MANAGER 7782 CLARK MANAGER 7788 SCOTT ANALYST 7839 KING PRESIDENT 7844 TURNER SALESMAN 7876 ADAMS CLERK 7900 JAMES CLERK 7902 FORD ANALYST 7934 MILLER CLERK
3、创建外部表testExtEmp
SQL> create table testExtEmp( 2 empno number(4),ename varchar2(10),job varchar2(9)) 3 organization external ( 4 type oracle_loader --数据转换驱动器,oracle_loader为默认,也可以改换其他,如oracle_datapump 5 default directory testDir1 --指定外部表所在目录 6 access parameters (fields terminated by whitespace) 7 location(‘testEmp.txt‘) --指定数据文件 8 ); Table created
4、查询外部表:
SQL> select * from testExtEmp; EMPNO ENAME JOB ----- ---------- --------- 7369 SMITH CLERK 7499 ALLEN SALESMAN 7521 WARD SALESMAN 7566 JONES MANAGER 7654 MARTIN SALESMAN 7698 BLAKE MANAGER 7782 CLARK MANAGER 7788 SCOTT ANALYST 7839 KING PRESIDENT 7844 TURNER SALESMAN 7876 ADAMS CLERK 7900 JAMES CLERK 7902 FORD ANALYST 7934 MILLER CLERK 14 rows selected
5、说明
1) 外部表是指不在数据库中的表,如操作系统上的一个按一定格式分割的文本文件或者其他类型的表,即数据在数据库的外部组织,是操作系统文件。
2) 这个外部表对于Oracle数据库来说,就好像是一张视图, 在数据库中可以像视图一样进行查询等操作。
3) 这个视图允许用户在外部数据上运行任何的SQL语句,而不需要先将外部表中的数据装载进数据库中。
4) 需要注意是,外部数据表都是只读的,不能够更改。
5) 操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。
6) 不可以在上面运行任何 DML 操作,不可以创建索引。
7) 可以查询操作和连接,可以并行操作。
时间: 2024-10-15 10:52:53