在Oracle9i中引入了外部表(External Table)的概念,通过访问驱动程序ORACLE_LOADER可以对数据库之外的文件进行只读的SQL查询。在Oracle10g中,提供了第二个访问驱动程序ORACLE_DATAPUMP,允许用户对外部表进行写操作,写出的结果文件以特定的结构保存并允许DPAPI访问,即该结果文件可以被加载到另一个数据库中。同时,新的访问驱动程序也支持列对象的投影。
先利用Oralce的外部表的功能结合Oracle 10g 开始提供的Oracle_Datapump对一个模型的建立实践,实现的关键实验代码如下,做个笔记怕忘了:
---创建外部文件源路径和目标路径
create or replace directory SRC_DIR as 'E:\DUMP';
create or replace directory DST_DIR as 'E:\LOAD';
---ORACLE_DATAPUMP 创建外部表,写出到外部文件
create table ext_out_table
organization external
(type ORACLE_DATAPUMP
default directory SRC_DIR
location('external_table_01.dmp','external_table_02.dmp'))
parallel 2
as
select t.dim_date,t.dim_org,sum(t.fee) fee
from dm_base_outpatient_count_day t
group by t.dim_date,t.dim_org
---利用DBMS_FILE_TRANSFER包实现文件的传输
begin
begin dbms_file_transfer.copy_file('SRC_DIR','external_table_01.dmp','DST_DIR','external_table_01_bak.dmp'); end;
begin dbms_file_transfer.copy_file('SRC_DIR','external_table_02.dmp','DST_DIR','external_table_02_bak.dmp'); end;
end;
---ORALCE_DATAPUMP 读取外部文件(需要也是ORACLE_DATAPUMP驱动的),创建外部表
create table ext_in_table
(dim_date date,
dim_org varchar2(128),
fee number)
organization external
(type ORACLE_DATAPUMP
default directory DST_DIR
access parameters
(logfile 'external_in_table_log.log')
location('external_table_01_bak.dmp','external_table_02_bak.dmp'))