外部表是指不在數據庫中的表,如操作系統上的壹個按壹定格式分割的文本文件或者其他類型的表。這個外部表對於Oracle數據庫來說,就好像是壹張視圖,在數據庫中可以像試圖壹樣進行查詢等操作。這個試圖允許用戶在外部數據上運行任何的SQL語句,而不需要先將外部表中的數據裝載進數據庫中。不過需要註意是,外部數據表都是只讀的,不能夠更改。不過在使用外部表時仍然有不少的限制。
限制:需要先建立目錄對象。
在使用外部數據表的時候,需要先建立目錄對象。也就是說,要想Oracle數據庫系統(在Oracle中實現控制文件多路復用)訪問操作系統文件,就必須在數據庫中建立指向這個操作系統文件的目錄對象,然後通過這個目錄對象訪問相應的操作系統文件,即用目錄對象存儲操作文件的保存位置。不過需要註意,這個目錄對象普通用戶是無權創建的。壹般情況下只有特權用戶或者數據庫管理員角色才可以創建目錄對象。如果允許其他用戶也可以創建目錄對象的話,就需要授權給其他用戶。
其實這個目錄對象就是操作系統中文件或者表格的存儲位置。不過在建立對象的時候,需要小心,Oracle數據庫系統不會去確認這個目錄是否真的存在。如果在輸入這個目錄對象的時候,不小心把路徑寫錯了,那可能這個外部表仍然可以正常建立,但是卻無法查詢到數據。由於建立目錄對象時,缺乏這種自我檢查的機制,為此在將路徑賦予給這個目錄對象時,需要特別的註意。另外需要註意的是路徑的大小寫。在Windows操作系統中,其路徑是不區分大小寫的。而在Linux操作系統,這個路徑需要區分大小寫。故在不同的操作系統中,建立目錄對象時需要註意這個大小寫的差異。最好數據庫管理員可以養成壹個習慣,無論在什麽操作系統中,都采用小寫的目錄名與文件名。那麽在不同的操作系統中,就不用受到這個大小寫的困擾了。最後需要註意的是,目錄對象名必須唯壹。如果目錄對象名字有重復的話,系統會提示錯誤信息:“名稱已有現有對象引用”,而不會自動覆蓋原有的對象名設置。
雖然這個對象名設置比較簡單,但是其是數據庫尋找操作系統上文件的唯壹途徑。所以這個目錄對象的創建必須確保準確。否則的話,外部表就可能無法正常使用。