Oracle中的external table和 materialized view学习

来源:互联网 发布:手机版淘宝任务栏 编辑:程序博客网 时间:2024/04/24 17:40

先看看external table学习

external table即外部表,oracle提供了可以直接通过sql访问操作系统文件的机制,即外部表,数据以操作系统文件格式进行存储,通过建立外部表可以在oracle中像查询其他表一样进行相应的查询操作。

示例:

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

8001,Sherry,CLERK,7789,03-JAN-82,3800,0,20

8341,Sarlin,MANAGER,4593,23-JAN-81,8800,0,20

 

创建external table:

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 externaldir

ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE 

FIELDS TERMINATED BY ',') 

LOCATION('1.DAT','2.DAT'));

 

这是可以通过sql查询ext1数据

select * from ext1;

select * from ext1 where emp_id=7301;

 

注意:

外部表只能进行查询相关操作,不能进行sql的dml操作。

 

下面看materialized view的创建,

create materialized view [view_name]
refresh 
[fast|complete|force]
[
on [commit|demand
] |
start 
with (start_time) next (next_time)
]
as
{创建物化视图用的查询语句}


其中刷新方式分三种,fast为快速刷新,只是进行增量刷新,complete为全部刷新,force为默认方式即手动刷新

刷新时间点有三种,on commit , on demand 以及定期刷新start with ... next ...


就以上面的外部表为例

CREATE MATERIALIZED VIEW v_ext1 as select * from ext1;

 

此时可以直接查询v_ext1获取数据

select * from v_ext1;

 

编辑2.dat文件,增加一条记录,在查询物化视图发现数据没有变化,物化视图没有刷新,默认不会进行刷新,需要手动刷新

exec dbms_mview.refresh('v_ext1');

再次查询,数据发生变化。