环境: oracle linux6.2 +oracle11.2.0.4
实验步骤:
1. 创建测试文件external_data.dat,内容如下:
<span style="font-size:12px;">0001,hawke_test,03-OCT-11
0002,malei_test,03-OCT-11</span>
2. 使用sys用户建立逻辑目录,并给指定的用户授予权限。(要有对操作系统中该目录的读写权限,直接使用scott用户建立,提示权限不足):
SQL> create directory dbtestdir as '/u01/dmp';
Directory created.
SQL> grant read on directory dbtestdir to scott;
Grant succeeded.
SQL> grant write on directory dbtestdir to scott;
Grant succeeded.
3. 将测试文件external_data.dat,拷贝至/u01/dmp目录下。
4. 创建外部表,内容如下:
<span style="font-size:12px;">SQL> CREATE TABLE external_tab
2 (
3 id varchar2(4 char),
4 name varchar2(12 char),
5 birthday date
6 )
7 ORGANIZATION EXTERNAL
8 (
9 TYPE ORACLE_LOADER
10 DEFAULT DIRECTORY dbtestdir
11 ACCESS PARAMETERS
12 (
13 RECORDS DELIMITED BY NEWLINE
14 FIELDS TERMINATED BY ','
15 )
16 LOCATION('external_data.dat')
17 );</span>
<span style="font-size:12px;">Table created.</span>
5. 查询外部表:
<span style="font-size:12px;">SQL> select * from external_tab;
ID NAME BIRTHDAY
-------- ------------------------ --------------
0001 hawke_test 03-10月-11
0002 malei_test 03-10月-11
</span>
6. 语法说明:
SQL>create table ex_tb1 --创建外部表
2 (ename,job,sal,dname) --表列描述,注意未指定数据类型
3 organization external
4 (
5 type oracle_datapump --使用datapump将查询结果填充到外部表,注,此处由select生成,故不支持
oracle_loader
6 default directory dat_dir --指定外部表的存放目录
7 location('tb1.exp,tb2.exp'))
8 parallel 2 --按并行方式来填充,这里的并行度必须与生成的文件数量一致才能起作用
9 as
10 select ename,job,sal,dname --填充使用的原始数据
11 from emp join dept
12 on emp.deptno=dept.deptno
6. 语法说明:
SQL>create table ex_tb1 --创建外部表
2 (ename,job,sal,dname) --表列描述,注意未指定数据类型
3 organization external
4 (
5 type oracle_datapump --使用datapump将查询结果填充到外部表,注,此处由select生成,故不支持
oracle_loader
6 default directory dat_dir --指定外部表的存放目录
7 location('tb1.exp,tb2.exp'))
8 parallel 2 --按并行方式来填充,这里的并行度必须与生成的文件数量一致才能起作用
9 as
10 select ename,job,sal,dname --填充使用的原始数据
11 from emp join dept
12 on emp.deptno=dept.deptno