1,定义
外部表顾名思义,存储在数据库外面的表,外部表的数据是存储在操作系统中,是操作系统文件。建立外部表的时候,不会产生段,页,簇等存储结构,只有与表相关的定义放在数据字典中,不能对外部内容进行修改(update,insert,delete),不能对外部表建立索引。不需将外部表的数据装载到数据库中来,通过 sql 解码器来访问外部表。
2,参考资料
《DM8_SQL语言使用手册.pdf》3.5.1.2 外部表的配置使用说明
3,实验环境:
操作系统环境
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
数据库版本
SQL> SELECT * from SYS.V$VERSION;
行号 BANNER
1 DM Database Server 64 V8
2 DB Version: 0x7000d
3 03134284336-20250117-257733-20132
4 Msg Version: 32
5 Gsu level(5) cnt: 0
已用时间: 4.464(毫秒). 执行号:1402.
SQL>
准备的txt文件
[root@localhost dmbackup]# ll /dmbackup/emp.txt
-rw-r--r-- 1 dmdba dinstall 102 May 5 22:52 /dmbackup/emp.txt
[root@localhost ~]# cat /dmbackup/emp.txt
1,oralce,2021-04-04
2,dameng,2020-08-08
3,oralce,2021-04-04
4,mysql,2022-04-04
5,sqlserver,2023-04-04
4,准备的控制文件
[root@localhost dmbackup]# ll /dmbackup/emp.ctl
-rw-r--r-- 1 dmdba dinstall 83 May 5 23:11 /dmbackup/emp.ctl
[root@localhost dmbackup]# cat /dmbackup/emp.ctl
LOAD DATA
INFILE 'emp.txt' STR X '0a'
INTO TABLE DMHR.EMP
FIELDS TERMINATED BY ','
[root@localhost dmbackup]#
5,方法1,直接使用数据文件 (报错 -2609)
create external table DMHR.EMP
(
C1 INT,
C2 VARCHAR(50),
C3 DATE
) from datafile '/dmbackup/emp.txt' parms(FIELDS DELIMITED BY ',' ,RECORDS DELIMITED BY 0x0a);
6.方法2,使用控制文件方式(报错 -2609)
create external table DMHR.EMP
(
C1 INT,
C2 VARCHAR(50),
C3 DATE
) from '/dmbackup/emp.ctl';
7.配置目录
create directory DMBK as '/dmbackup';
8.方法3,使用控制文件目录(成功)
create external table DMHR.EMP
(
C1 INT,
C2 VARCHAR(50),
C3 DATE
) from datafile default directory "DMBK" location ('emp.txt') parms(FIELDS DELIMITED BY ',' ,RECORDS DELIMITED BY 0x0a);
9.方法4,使用数据文件目录(成功)
create external table DMHR.EMP
(
C1 INT,
C2 VARCHAR(10),
C3 DATE
) from default directory "DMBK" location ('emp.ctl');
10,控制文件中带上路径,可以创建表,但浏览出错(报错 -7082)
[root@localhost dmbackup]# cat emp.ctl
LOAD DATA
INFILE '\dmbackup\emp.txt' STR X '0a'
INTO TABLE DMHR.EMP
FIELDS TERMINATED BY ','
[root@localhost dmbackup]#
11.回车换行 0x0d和0x0a
Windows下在txt文件中敲下回车键,然后16进制观察,会发现获得了2个字符,0x0d0a
在linux下,敲下回车键,你就会发现,它每次只增加一个字符,0x0a
在本linux测试环境中,故意写上 0x0d0a,浏览数据,只有一行。
create external table DMHR.EMP
(
C1 INT,
C2 VARCHAR(50),
C3 DATE
) from datafile default directory "DMBK" location ('emp.txt') parms(FIELDS DELIMITED BY ',' ,RECORDS DELIMITED BY 0x0d0a);
12.总结
外部表的报错,网传是可能与数据库版本,操作系统的回车换行方式 等等都有关系。需要测试好后使用。有遇到其他情况的,欢迎交流
文章
阅读量
获赞