oracle外部表External table
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
外部表External table
把一个普通的文本格式的OS文件看作是Oracle数据库的外部表,Oracle可以象普通表一样进行select 操作,可以建视图,可以与其他进行连接等,但不能对其进行DML操作,即该表是只读的!(10g里可借此导出数据至平面dmp文件)。
External table和正规的表很相似,以下的几点需要注意:
l 数据在数据库的外部组织,是操作系统文件。
l 操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。
l 数据是只读的。(外部表相当于一个只读的虚表)
l 不可以在上面运行任何DML操作,不可以创建索引。
l 可以查询操作和连接,可以并行操作。
假设如下的两个平面文件
1.dat:
7301,SMITH,CLERK,7902,17-DEC-80,100,0,20
7402,ALLEN,SALESMAN,7698,20-FEB-81,250,0,30
7503,WARD,SALESMAN,7698,22-FEB-81,450,0,30
7504,JONES,MANAGER,7839,02-APR-81,1150,0,20
2.dat:
7611,MARTIN,SALESMAN,7698,28-SEP-81,1250,0,30
7612,BLAKE,MANAGER,7839,01-MAY-81,1550,0,30
7913,MILLER,CLERK,7782,23-JAN-82,3500,0,10
创建一个逻辑目录:
CREATE DIRECTORY DIR_TEST AS 'D:TEMP';
定义外部表:
CREATE TABLE EXT1
emp_id number(4),
ename varchar2(12),
job varchar2(12) ,
mgr_id¡¡number(4) ,
hiredate date,
salary number(8),
comm number(8),
dept_id number(2))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY DIR_TEST
ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ',')
LOCATION('1.DAT','2.DAT'))
查询外部表:
select * from ext1;
得到外部表的有关信息:
SELECT OWNER,TABLE_NAME,DEFAULT_DIRECTORY_NAME,ACCESS_PARAMETER S
FROM DBA_EXTERNAL_TABLES;
select * from DBA_EXTERNAL_LOCATIONS;
================================================== =
升级Oracle中的外部表
--创建逻辑目录dirls,外部表数据文件所在位置
CREATE OR REPLACE directory DIR_x1 as 'd:dbexp';
--创建外部表结构create table x1
(c1 VARCHAR2(10)
, c2 VARCHAR2(10)
)
organization external
( type oracle_loader
default directory dir_x1
access parameters ( records delimited by newline
badfile 'x1.bad'
discardfile 's1.dis'
logfile 'x1.log'
fields terminated by ','
optionally enclosed by '"'
missing field values are null
)
location ('x1.txt','x2.txt')
)
/html/200509/2005090516013200010796.html
甲骨文(Oracle)数据库的外部表(external tables ),作为一个平台文件,在支撑Oracl e SQL的时候,对整合Oracle数据仓库以及“寄生”在服务器上的表数据的外部元数据起着至关重要的作用。
此外,外部表也可用来当作“csv”文件,允许这种类型的外部表数据在微软的Excel电子数据表中得以使用。
一个名为Peter Kok的技术人员,发布了一则Oracle外部表获得升级的技巧,他列出的操作步骤如下:
1、在外部表中定义一个“view”;
2、在这个“view”中,分别为“插入”、“更新”和“删除”定义一个“INSTEAD OF”型的triggers;
3、在这些triggers中,编写PL/SQL以执行必要的处理过程。
Kok接着出示了例子的代码,还提供了这项技术的免费下载,在最后也提出了一些重要的“警告”:
The problem is with doing a multiple delete (i.e. a delete statement that affec ts more than one row). As we noted before, the INSTEAD OF trigger is implici tly for each row. This means statement-level information is unavailable.
例子如下所示:
create or replace view emp_ext_tab_vw
as
select rownum rownumber
, emp.empno empno
, emp.ename ename
, emp.job job
, emp.mgr mgr
, emp.hiredate hiredate
, emp.sal sal
, m comm
, emp.deptno deptno
from emp_ext_tab emp
order by rownumber asc
/
create or replace trigger emp_ext_tab_vw_brd
instead of delete on emp_ext_tab_vw
begin
--
emp_ext_tab_dml.delete_record ( :OLD.rownumber );
--
end;
/