外部表將OS平面檔(CSV等)映射為唯讀資料表,無需載入資料庫即可用SQL查詢。五大實務限制:
限制一:必須先建立目錄物件
CREATE DIRECTORY ext_dir AS '/data/csv'; 指向OS路徑
- 僅
DBA/特權角色可建立,普通用戶需授權
- Oracle**不驗證路徑真實存在**,路徑拼寫錯誤不報錯但查無資料
- Linux路徑大小寫敏感,Windows不敏感 → 建議統一小寫目錄/檔名
- 目錄物件名稱全域唯一,重名報
ORA-00955不覆蓋
限制二:OS檔案格式嚴格要求
- 單一檔案**僅允許一種分隔符**(逗號/分號/Tab等),建表時
FIELDS TERMINATED BY指定
- **不可包含標題列**,會被視為資料列導致型別不匹或髒資料
- 存取時自動在目錄產生日誌檔(
_log_),記錄存取頻率/成敗
限制三:臨時表(外部表定義)建立限制
- 欄位名含特殊字元(如
student_no#)必須雙引號"student_no#",否則建表成功但查詼報「外掛錯誤」
- **不分配儲存空間**,僅資料字典存中繼資料(欄位對應關係)
- 衍生限制:不可建索引、不可DML(INSERT/UPDATE/DELETE),僅支援
SELECT
限制四:刪除順序與依賴檢查
- 原則:先刪外部表,再刪目錄物件
- 一個目錄可對應多外部表,Oracle刪目錄時**不檢查殘留外部表**
- 誤刪目錄導致現有外部表查詢報
ORA-04043「物件不存在」
- 安全做法:
SELECT * FROM DBA_EXTERNAL_LOCATIONS; 確認目錄無其他外部表引用再刪除
限制五:跨平台檔案格式相容性
- Windows(CRLF)與Linux(LF)換行符不同,直接跨平台讀取易導致單行顯示全檔
- 建議:外部表檔案與Oracle部署於**同一OS平台**,或預先轉換格式(
dos2unix等)
外部表適合ETL暫存、日誌分析、唯讀參考資料等場景,掌握限制才能避坑。