外部表
1. 语法






(注:
外部基表不能存在大字段列;
外部基表不能为临时表,不能建立分区;
外部基表是只读的,不存在表锁,不允许任何针对外部表的增删改数据操作,不允许TRUNCATE外部表操作。)
2. 示例
【实验一】
指定操作系统的一个文本文件作为数据文件,编写控制文件及建表语句。
编写数据文件(/opt/dm8/data/data.txt),首行数据如下:
a|abc|varchar_data|12.34|12.34|12.34|12.34|0|1|1|1234|1234|1234|10
0|11|1234|1|1|14.2|12.1|12.1|1999-10-01|9:10:21|2002-12-12|15
编写控制文件(/opt/dm8/data/ctrl.txt)如下:
INFILE '/opt/dm8/data/data.txt'INTO TABLE EXT
FIELDS '|'
建表语句:
DROP TABLE EXT;
CREATE EXTERNAL TABLE EXT (
L_CHAR CHAR(1),
L_CHARACTER CHARACTER(3),
L_VARCHAR VARCHAR(20),
L_NUMERIC NUMERIC(6,2),
L_DECIMAL DECIMAL(6,2),
L_DEC DEC(6,2),
L_MONEY DECIMAL(19,4),
L_BIT BIT,
L_BOOL BIT,
L_BOOLEAN BIT,
L_INTEGER INTEGER,
L_INT INT,
L_BIGINT BIGINT,
L_TINYINT TINYINT,
L_BYTE BYTE,
L_SMALLINT SMALLINT,
L_BINARY BINARY,
L_VARBINARY VARBINARY,
L_FLOAT FLOAT,
L_DOUBLE DOUBLE,
L_REAL REAL,
L_DATE DATE,
L_TIME TIME,
L_TIMESTAMP TIMESTAMP,
L_INTERVAL INTERVAL YEAR
)FROM '/opt/dm8/data/ctrl.txt';
系统执行建表语句后,就在数据库中建立了相应的外部基表。查询 ext_table 表: SELECT * FROM EXT;

(注:外部表只是创建的元数据,一旦将控制文件或数据文件删除之后,数据不能正常查询。)
【实验二】
指定操作系统的一个文本文件作为数据文件(/opt/dm8/data/data2.txt)
数据如下:
10|9|7
4|3|2
建表语句:
create external table ext_table2(c1 int,c2 int,c3 int) from datafile '/opt/dm8/data/data2.txt' parms(fields delimited by '|');
查询结果:
select * from ext_table2;
行号 C1 C2 C3
---------- ----------- ----------- -----------
1 10 9 7
2 4 3 2

【实验三】
编写控制文件(/opt/dm8/data/quan.ctrl)
内容如下:
OPTIONS(
DATA = '/opt/dm8/data/quan.txt'
ERRORS = 5
BADFILE = '/opt/dm8/data/t1.bad'
LOG = '/opt/dm8/data/t1.log'NULL_STR = ' ffff '
SKIP = 0
CHARACTER_CODE = 'utf-8' )
LOAD DATA
INFILE '/opt/dm8/data/quan.txt'
BADFILE '/opt/dm8/data/quan.bad'
INTO TABLE fldr1
FIELDS TERMINATED BY '||'
编写数据文件(/opt/dm8/data/quan.txt)如下:
1||ab||2
1||ab||1
建表语句:
CREATE EXTERNAL TABLE fldr1
(
"C1" NUMBER(2,1),
"C2" VARCHAR(4),
"C3" NUMBER(2,0))
FROM '/opt/dm8/data/quan.ctrl';
查询表 fldr1 中的数据:
select * from fldr1;
行号 C1 C2 C3
---------- --- -- --
1 1.0 ab 2
2 1.0 ab 1





