外部表External table
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_PARAMETERS 
 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')
 )
http://www.softhouse.com.cn/html/200509/2005090516013200010796.html
甲骨文(Oracle)數據庫的外部表(external tables ),作為一個平臺文件,在支撐Oracle 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 affects more than one row). As we noted before, the INSTEAD OF trigger is implicitly 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
 , emp.comm 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;
 /
10g里可借此導出數據至平面dmp文件:http://www.orafaq.com/node/848
create table x_1
 organization external
 ( type oracle_datapump
 default directory dir_dmp
 location ('x_1.dmp')
 ) as 
 select owner,table_name,tablespace_name from dba_tables where owner='XSB'; 
select * from x_1;
create table x_2 (
 owner varchar2(100),table_name varchar2(100),tablespace_name varchar2(100)
 )
 organization external
 ( type oracle_datapump
 default directory dir_dmp
 location ('x_1.dmp')
 );
總結
以上是生活随笔為你收集整理的外部表External table的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: SharePoint 2007 Web
- 下一篇: 怎么样配置交换机TRUNK
