本文為個人學習《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一書過程中的筆記與理解分享,僅用於學習與交流,部分內容參考原書觀點並結合>實際經驗進行整理。若涉及版權問題,請聯繫刪除或溝通處理。也請大家支持購買原版書籍。
數據搬運工:Oracle數據庫的導入導出技巧
數據搬運的兩種神器
在日常數據庫工作中,我們經常需要把數據搬進搬出Oracle數據庫。這就好比給數據庫做"進出口貿易":
數據進口工具:
- 外部表 - 能把普通文件當成數據庫表來用
- SQL*Loader - Oracle的老牌數據加載工具
數據出口工具:
- Data Pump - Oracle的專用數據導出格式
- 平面文件導出 - 生成CSV等通用格式文件
外部表:新一代數據搬運利器
想象一下,你能直接查詢一個文本文件就像查詢數據庫表一樣,這就是外部表的魔力!
為什麼選擇外部表?
雖然SQLLoader還有很多人在用,但外部表正在成為新寵。只有在兩種情況下還需要用SQLLoader:
- 需要從網絡其他位置加載數據時
- 多個用户要同時處理不同文件時
外部表的超能力:
- 能用複雜的查詢條件篩選要加載的數據
- 能直接更新現有數據庫記錄
- 加載時能關聯其他表進行數據校驗
- 能對數據排序後再加載
- 一個指令就能往多個表插入數據
- 支持在讀取數據前執行系統命令
- 對於懂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文件,還是需要複雜轉換的數據,它都能輕鬆應對。下次你需要往數據庫裏導入數據時,不妨試試這個強大的工具,你會發現數據搬運原來可以如此優雅!
記住:好的工具讓工作事半功倍,選擇合適的數據搬運方式,讓你的數據庫工作更加高效順暢!
------------------作者介紹-----------------------
姓名:黃廷忠