複製鏈接
請複製以下鏈接發送給好友

外部表

鎖定
外部表只能在Oracle 9i之後來使用。簡單地説,外部表,是指不存在於數據庫中的表。通過向Oracle提供描述外部表的元數據,我們可以把一個操作系統文件當成一個只讀的數據庫表,就像這些數據存儲在一個普通數據庫表中一樣來進行訪問。外部表是對數據庫表的延伸。
中文名
外部表
外文名
External Table
定    義
不存在於數據庫中的表
作    用
對數據庫表的延伸
使用範圍
Oracle 9i之後

外部表外部表的特性

(1) 位於文件系統之中,按一定格式分割,如文本文件或者其他類型的表可以作為外部表。
(2) 對外部表的訪問可以通過SQL語句來完成,而不需要先將外部表中的數據裝載進數據庫中。
(3) 外部數據表都是隻讀的,因此在外部表不能夠執行DML操作,也不能創建索引。
(4) ANALYZE語句不支持採集外部表的統計數據,應該使用DMBS_STATS包來採集外部表的統計數據。
(5) 可以查詢操作和連接。可以並行操作。
(6) 數據在數據庫的外部組織,是操作系統文件。
(7) 操作系統文件在數據庫中的標誌是通過一個邏輯目錄來映射的。

外部表創建外部表

使用CREATE TABLE語句的ORGANIZATION EXTERNAL子句來創建外部表。外部表不分配任何盤區,因為僅僅是在數據字典中創建元數據。
外部表的創建語法
create table table_name
(col1 datatype1,col2 datatype2,col3 datatype3)
organization external
(.....)
例子
我們假設有這樣一個文件(DATA.TXT):
1 this is a string
2 這裏是個字符串
3 ABC
要把這樣一個文件映射成外部表,有以下工作要做:
首先,我們需要為Oracle創建一個Directory,
創建方式為,在數據庫中執行,須用DBA用户創建,並給應用授權。
create directory EXT_TABLE_DIR as '/home/oracle/app/oracle/oradata/php/'
(注意“/home/oracle/app/oracle/oradata/php/”是一個存在於Oracle數據庫服務器本身上邊的實際存在的文件夾;)
然後,將DATA.TXT文件拷貝到上述文件夾下;
最後,創建一個對應外部表,
create table EXT_TABLE_NAME
COL_1 NUMBER,
COL_2 VARCHAR2(512)
organization external
type oracle_loader
default directoryEXT_TABLE_DIR
access parameters ( fields terminated by '|')
location ('DATA.TXT')
reject limit unlimited;
注意EXT_TABLE_NAME是要映射成的外部表名稱,EXT_TABLE_DIR是第一步裏我們創建的Oracle的Directory,“|”是文件裏的分割符,DATA.TXT是文件名。
需要補充的是,最後有一句“reject limit unlimited”,告訴Oracle這個外部表沒有行數限制。否則,當文件中的數據量超過200萬行時,在對錶進行檢索時,就會出現ORA-30653,“reject limit reached”錯誤。