========================= 如何创建外部表?============================
使用SQL语句CREATE TABLE ... ORGANIZATION EXTERNAL创建外部表。
==========================外部表定义的几个重点========================
1 ORGANIZATION EXTERNAL关键字,必须要有。表明定义的表是外部表。
2 重要参数外部表的类型(TYPE)
ORACLE_LOADER:定义外部表的缺省(默认)方式,只能只读方式实现文本文件数据的装载。
ORACLE_DATAPUMP:支持队数据库的装载和卸载,数据文件必须为二进制dump文件。可以从外部表提取数据加载到内部表,也可以从内部表卸载数据作为二进制文件填充到外部表。
3 DEFAULT DIRECTORY:默认的目录 指明了外部文件所在的路径
4 ACCESS PARAMETERS:描述如何对外部表进行访问
5 LOCATION:定义了外部表的位置(数据存放位置也是数据来源路径)
================以下示例简要说明了每种访问驱动程序的属性使用情况===================
示例14-1指定ORACLE_LOADER访问驱动程序的属性
以下示例使用ORACLE_LOADER访问驱动程序显示每个属性的使用(它假定默认目录def_dir1已存在):
create or replace directory ENTRY_LOG as '/tmp/def_dir1/';
SQL> CREATE TABLE emp_load
2 (employee_number CHAR(5),
3 employee_dob CHAR(20),
4 employee_last_name CHAR(20),
5 employee_first_name CHAR(15),
6 employee_middle_name CHAR(15),
7 employee_hire_date DATE)
8 ORGANIZATION EXTERNAL
9 ( TYPE ORACLE_LOADER
10 DEFAULT DIRECTORY def_dir1 //指定用于未明确命名目录对象的所有输入和输出文件的默认目录
11 ACCESS PARAMETERS //访问参数 描述外部数据源并实现指定的外部表类型
12 ( RECORDS DELIMITED BY NEWLINE //按行换行;RECORDS关键字后定义如何识别数据行,DELIMITED BY 'XXX'——换行符,常用newline定义换行
13 CHARACTERSET UTF8
14 BADFILE entry_log:'EMP.bad'
15 LOGFILE entry_log:'EMP.LOG'
16 READSIZE 1024 //Oracle读取输入数据文件所用的默认缓冲区,此处为MB
17 FIELDS TERMINATED BY "," LDRTRIM //描述字段以','结尾
18 MISSING FIELD VALUES ARE NULL //某些字段空缺值都设为NULL
19 REJECT ROWS WITH ALL NULL FIELDS //所有为空值的行被跳过并且记录到.bad文件
20 ( employee_number CHAR(2),
21 employee_dob CHAR(20),
22 employee_last_name CHAR(18),
23 employee_first_name CHAR(11),
24 employee_middle_name CHAR(11),
25 employee_hire_date CHAR(10) date_format DATE mask "mm/dd/yyyy"
26 )
27 )
28 LOCATION ('info.dat')
29 );
30 reject limit unlimited //允许发生错误的个数不受限制
31 noparallel //不按并行方式来填充
通过访问驱动程序提供的信息可确保处理来自数据源的数据,以使其与外部表的定义相匹配。 CREATE TABLE emp_load之后列出的字段实际上是在info.dat源文件中定义数据的元数据。
示例14-2指定ORACLE_DATAPUMP访问驱动程序的属性
此示例创建一个名为inventories_xt的外部表,并使用oe示例模式中的表清单中的数据填充外部表的转储文件。
SQL> CREATE TABLE inventories_xt
2 ORGANIZATION EXTERNAL
3 (
4 TYPE ORACLE_DATAPUMP
5 DEFAULT DIRECTORY def_dir1
6 LOCATION ('inv_xt.dmp')
7 )
8 AS SELECT * FROM inventories;
Table created.