本文為個人學習《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一書過程中的筆記與理解分享,僅用於學習與交流,部分內容參考原書觀點並結合>實際經驗進行整理。若涉及版權問題,請聯繫刪除或溝通處理。也請大家支持購買原版書籍。

數據搬運工:Oracle數據庫的導入導出技巧

數據搬運的兩種神器

在日常數據庫工作中,我們經常需要把數據搬進搬出Oracle數據庫。這就好比給數據庫做"進出口貿易":

數據進口工具:

  • 外部表 - 能把普通文件當成數據庫表來用
  • SQL*Loader - Oracle的老牌數據加載工具

數據出口工具:

  • Data Pump - Oracle的專用數據導出格式
  • 平面文件導出 - 生成CSV等通用格式文件

外部表:新一代數據搬運利器

想象一下,你能直接查詢一個文本文件就像查詢數據庫表一樣,這就是外部表的魔力!

為什麼選擇外部表?
雖然SQLLoader還有很多人在用,但外部表正在成為新寵。只有在兩種情況下還需要用SQLLoader:

  1. 需要從網絡其他位置加載數據時
  2. 多個用户要同時處理不同文件時

外部表的超能力:

  • 能用複雜的查詢條件篩選要加載的數據
  • 能直接更新現有數據庫記錄
  • 加載時能關聯其他表進行數據校驗
  • 能對數據排序後再加載
  • 一個指令就能往多個表插入數據
  • 支持在讀取數據前執行系統命令
  • 對於懂SQL的人來説幾乎零學習成本

手把手教你用外部表

三步輕鬆搞定:

第一步:創建目錄對象

create or replace directory ext_tab_dir as '/tmp';

這就好比告訴數據庫:"請記住,/tmp這個文件夾很重要!"

第二步:準備數據文件
創建一個dept_ext.csv文件,內容如下:

10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS  
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

第三步:創建外部表

CREATE TABLE dept_ext(
  DEPTNO number(2),
  DNAME varchar2(14),
  LOC varchar2(13)
) ORGANIZATION EXTERNAL (
  default directory ext_tab_dir
  location ('dept_ext.csv')
);

大功告成! 現在你可以像查普通表一樣查詢這個文件:

select * from dept_ext;

高級玩法:數據轉換

現實中的數據往往不是那麼規整。比如你拿到這樣的數據:

10|ACCOUNTING|NEW YORK|12/04/1962
20|RESEARCH|DALLAS|08/10/1966

注意這裏:

  • 用|而不是,分隔
  • 日期是mm/dd/yyyy格式

沒問題,外部表輕鬆應對:

CREATE TABLE dept_ext(
  DEPTNO number(2),
  DNAME varchar2(14), 
  LOC varchar2(13),
  CRE_DATE date
) ORGANIZATION EXTERNAL (
  type ORACLE_LOADER
  default directory ext_tab_dir
  access parameters (
    records delimited by newline
    fields terminated by '|'
    (DEPTNO,
     DNAME,
     LOC,
     CRE_DATE char date_format date mask "mm/dd/yyyy")
  )
  location ('dept_ext.csv')
);

看,日期自動轉換成了標準的DATE類型!

總結

外部表就像給數據庫裝上了"文件閲讀器",讓數據導入變得簡單直觀。無論是簡單的CSV文件,還是需要複雜轉換的數據,它都能輕鬆應對。下次你需要往數據庫裏導入數據時,不妨試試這個強大的工具,你會發現數據搬運原來可以如此優雅!

記住:好的工具讓工作事半功倍,選擇合適的數據搬運方式,讓你的數據庫工作更加高效順暢!

------------------作者介紹-----------------------
姓名:黃廷忠