2014-08-25 BaoXinjian
一、摘要
ORACLE外部表用來存取數據庫以外的文本文件(Text File)或ORACLE專屬格式文件。
因此,建立外部表時不會產生段、區、數據塊等存儲結構,只有與表相關的定義放在數據字典中。
外部表,顧名思義,存儲在數據庫外面的表。
當存取時才能從ORACLE專屬格式文件中取得數據,外部表僅供查詢,不能對外部表的內容進行修改(INSERT、UPDATE、DELETE操作)。
不能對外部表建立索引。因為創建索引就意味著要存在對應的索引記錄。而外部表其實在沒有存儲在數據庫中。
故在外部是無法建立索引的,如果硬要建立的話,則系統會提示“操作在外部組織表上不受支持”的錯誤提示。
1. 外部表特征
2. 外部表限制
3. 外部表優勢
如果要談外部表的優勢,一般會和SQLLDR來對比,外部表很多語法跟SQLLDR控制文件確實有很多類似的地方,下面談談自己的理解和"Oracel 9i&10g編程藝術"裡面的一些對比
二、案例 - 創建外部表,並進行增刪改查操作
案例:創建外部表,並導入測試數據,進行測試
1. 創建目錄
CREATE DIRECTORY extertable as '/home/oracle/extertable';
2. 創建測試的數據文件,並測試
3. 創建外部表
CREATE TABLE exter_test_table ( ID NUMBER (5), NAME VARCHAR (12), SEX VARCHAR (8), AGE NUMBER (3), GRADE NUMBER (5) ) ORGANIZATION EXTERNAL ( TYPE oracle_loader DEFAULT DIRECTORY extertable ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY ',' ) LOCATION ('student.data' ) ); ALTER TABLE exter_test_table REJECT LIMIT UNLIMITED;
4. 創建表後,可直接查詢出在數據文件中的資料
5. 外部表只能進行select,無法進行delete / update, 如需進行DML操作只能在數據文件本身中
6. 進行操作時,會在數據文件目錄中產生log文件,記錄數據導入和導出的情況
7. 查詢數據庫中外部表的情況 dba_external_locations / dba_external_tables
三、案例 - 刪除外部表
刪除外部表SQL語法跟普通表一樣,但是不同之處在於有可能還要刪除與之對應的目錄對象。
當外部表不用時,需要及時刪除外部表或者與之對應的目錄對象。
不過在刪除這些內容時會有一些限制。這些限制主要是管理上的限制,而不是技術上的限制。
也就是說,Oracle數據庫系統沒有對其進行強制的限制。
但是如果 數據庫管理員不遵守這些限制的話,可能會出現一些問題。
如要先刪除外部表,然後再刪除目錄對象。有時候一個目錄對象中可能會包含多個外部表。
此時必須要確 認所有的外部表都不用了,都已經刪除干淨了,然後才能夠刪除目錄對象。
在創建外部表時,操作系統會判斷一下,與之對應的目錄對象是否已經創建。
但是在刪除 對象時,系統不會去判斷跟這個目錄對象關聯的外部表是否已經全部刪除。
如果目錄對象刪除了,但是還有外部表存在。
此時查詢這個外部表的時候,系統就會提示 “對象不存在”的錯誤信息。所以這個刪除目錄對象時,數據庫系統缺乏一種檢查,此 時只有數據庫管理員在刪除目錄對象時,先手工確認一下這個目錄對象是否存在其他的外部表
********************作者: 鮑新建********************
參考:潇湘隱者大神 http://www.cnblogs.com/kerrycode/p/3894260.html
External Table,它就象通常的數據庫表一樣,擁有字段和數據類型約束,並且可以查詢,但是表中的數據卻不存儲在數據庫中,而是在與數據庫相關聯的普通外部文件裡。當你查詢 External Table 時,Oracle 將解析該文件並返回符合條件的數據,就象該數據存儲在數據庫表中一樣。
把DataTable建成Oracle的外部表,然後就可以跟普通表一樣的聯合查詢了。