ORACLE_LOADER外部表簡單案例

yangtingkun發表於2011-08-09

Oracle的外部表有兩種DRIVER,一種是基於SQLLOADER,另一種是基於DATA PUMP

 

 

本來一直以為ORACLE_LOADER外部表和SQLLDR的差別不大,沒想到實現一個具體需求的時候才發現,二者還是區別挺大的。

這裡給出一個ORACLE_LOAD型別外部表的最簡單的例子,表的建立語句如下:

SQL> CREATE TABLE T_ORACLE_LOAD
2 (ID NUMBER,
3 NAME VARCHAR2(80),
4 DIRECTORY VARCHAR2(25),
5 FULL_NAME VARCHAR2(100)
6 )
7 ORGANIZATION EXTERNAL
8 (TYPE ORACLE_LOADER
9 DEFAULT DIRECTORY D_TEMP
10 ACCESS PARAMETERS
11 (RECORDS DELIMITED BY NEWLINE
12 FIELDS TERMINATED BY ','
13 (ID CHAR,
14 DIRECTORY CHAR,
15 NAME CHAR )
16 COLUMN TRANSFORMS
17 (FULL_NAME FROM CONCAT(DIRECTORY, NAME)))
18 LOCATION ('DATA.DAT'));

表已建立。

資料檔案格式如下:

1,d:\study\yangtk\,2006年總結.doc
2,d:\study\yangtk\,2007Oracle
開發者大會(一).doc
3,d:\study\yangtk\,2007Oracle
開發者大會(二).doc
4,d:\study\yangtk\,2007
年總結.doc
.
.
.
74,d:\study\yangtk\others\,
問題診斷和PLSQL方面.doc

外部表的很多方面都與SQLLDR裝載有所區別,比如反斜線’\’的處理,在SQLLDR中只需要第一個作為ESCAPE字元,連續兩個\\就可以了,而外部表中並不支援這種方式。

對於外部表載入NUMBER型別,也要使用CHAR方式,嘗試使用ORACLE_NUMBERINTEGER以及INTEGER EXTERNAL都不能正確的識別,看來這些型別更適用於ORACLE_DATAPUMP型別的裝載,資料格式都是Oracle內部儲存格式,或者數值固有的格式,而不是常見的ASCII格式。

此外LOB型別的載入也有很大的區別,這裡例子並沒有展示。SQLLDR是透過檔案路徑的方式,而外部表適用的是DIRECTORY的方式。

表建立成功後,透過SELECT即可實現載入:

SQL> SELECT * FROM T_ORACLE_LOAD;

ID NAME                           DIRECTORY        FULL_NAME
-- ------------------------------ ------------------ -----------------------------
 1 2006
年總結.doc                 d:\study\yangtk\ d:\study\yangtk\2006年總結.doc
 2 2007Oracle
開發者大會(一).doc d:\study\yangtk\ d:\study\yangtk\2007Oracle開發者大會(一).doc
 3 2007Oracle
開發者大會(二).doc d:\study\yangtk\ d:\study\yangtk\2007Oracle開發者大會(二).doc
 4 2007
年總結.doc                 d:\study\yangtk\ d:\study\yangtk\2007年總結.doc
.
.
.
74
問題診斷和PLSQL方面.doc        d:\study\yangtk\ d:\study\yangtk\問題診斷和PLSQL方面.doc

已選擇74行。

最後檢查載入日誌是否存在錯誤:

日誌檔案開啟於 08/09/11 12:25:56

T_ORACLE_LOAD 的欄位定義
記錄格式 DELIMITED BY NEWLINE
檔案中的資料與該平臺的 endianness 格式相同
接受帶有空欄位的行

資料來源中的欄位:

ID CHAR (255)
"," 終止
SQL 載入程式一樣修剪空白
DIRECTORY CHAR (255)
"," 終止
SQL 載入程式一樣修剪空白
NAME CHAR (255)
"," 終止
SQL 載入程式一樣修剪空白

列轉換
FULL_NAME
設定為以下的串聯
欄位 DIRECTORY
欄位 NAME

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-704537/,如需轉載,請註明出處,否則將追究法律責任。

相關文章