利用SQLLDR載入包含LOB物件的資料(二)
簡單描述一下透過第二資料檔案方式載入LOB型別的方法。
介紹複雜一點的,檔名和目錄在表中分別儲存的情況。
利用SQLLDR載入包含LOB物件的資料(一):http://yangtingkun.itpub.net/post/468/521873
如果匯入資料的檔名是完整的,但是在資料庫中目錄和檔名分別儲存,這時表結構中並不需要一個完整的FULL_NAME,但是控制檔案中FULL_NAME用作LOB的LOGFILE讀取列還是必須的,而且需要設定為BOUNDFILLER,而不能是FILLER。
表結構如下:
SQL> DROP TABLE T_LOAD_LOB PURGE;
表已刪除。
SQL> CREATE TABLE T_LOAD_LOB
2 (ID NUMBER,
3 NAME VARCHAR2(80),
4 DIRECTORY VARCHAR2(30),
5 CREATE_DATE DATE,
6 CONTENTS BLOB);
表已建立。
控制檔案如下:
LOAD DATA
INFILE *
INTO TABLE T_LOAD_LOB
FIELDS TERMINATED BY ','
(ID CHAR(255),
FULL_NAME BOUNDFILLER CHAR(255),
DIRECTORY EXPRESSION "SUBSTR(:FULL_NAME, 1, INSTR(:FULL_NAME, '\\',
-1))",
NAME EXPRESSION "SUBSTR(:FULL_NAME, INSTR(:FULL_NAME, '\\', -1) +
1)",
CREATE_DATE SYSDATE,
CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF)
BEGINDATA
1,d:\study\yangtk\others\2006年總結.doc
2,d:\study\yangtk\others\2007Oracle開發者大會(一).doc
3,d:\study\yangtk\others\2007Oracle開發者大會(二).doc
4,d:\study\yangtk\others\2007年總結.doc
.
.
.
74,d:\study\yangtk\others\問題診斷和PLSQL方面.doc
執行匯入過程:
D:\TEMP>SQLLDR TEST/TEST CONTROL=SQLLDR_LOB2.CTL
SQL*Loader: Release 10.2.0.5.0 - Production on 星期日 8月 7 22:37:28 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
達到提交點 - 邏輯記錄計數 64
達到提交點 - 邏輯記錄計數 73
達到提交點 - 邏輯記錄計數 74
檢查匯入日誌:
SQL*Loader: Release 10.2.0.5.0 - Production on 星期日 8月 7 22:37:28 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
控制檔案:
SQLLDR_LOB2.CTL
資料檔案:
SQLLDR_LOB2.CTL
錯誤檔案: SQLLDR_LOB2.bad
廢棄檔案: 未作指定
(可廢棄所有記錄)
要載入的數: ALL
要跳過的數: 0
允許的錯誤: 50
繫結陣列: 64 行, 最大 256000 位元組
繼續: 未作指定
所用路徑: 常規
表 T_LOAD_LOB,已載入從每個邏輯記錄
插入選項對此表 INSERT 生效
列名 位置 長度 中止 包裝資料型別
------------------------------ ---------- ----- ---- ---- ---------------------
ID
FIRST 255 ,
CHARACTER
FULL_NAME
NEXT 255 ,
CHARACTER
(BOUNDFILLER FIELD)
DIRECTORY
表示式
列的 SQL 串: "SUBSTR(:FULL_NAME, 1, INSTR(:FULL_NAME, '\', -1))"
NAME
表示式
列的 SQL 串: "SUBSTR(:FULL_NAME, INSTR(:FULL_NAME, '\', -1) + 1)"
CREATE_DATE
SYSDATE
CONTENTS
DERIVED * EOF
CHARACTER
動態 LOBFILE。 檔名在欄位 FULL_NAME 中
表 T_LOAD_LOB:
74 行 載入成功。
由於資料錯誤, 0 行
沒有載入。
由於所有 WHEN 子句失敗, 0 行 沒有載入。
由於所有欄位都為空的, 0 行
沒有載入。
為繫結陣列分配的空間: 33024 位元組 (64 行)
讀取 緩衝區位元組數: 1048576
跳過的邏輯記錄總數: 0
讀取的邏輯記錄總數:
74
拒絕的邏輯記錄總數:
0
廢棄的邏輯記錄總數:
0
從 星期日 8月 07 22:37:28 2011 開始執行
在 星期日 8月 07 22:37:33 2011 處執行結束
經過時間為: 00: 00: 04.73
CPU 時間為: 00: 00: 00.17
檢查資料載入情況:
SQL> SELECT ID, NAME, DIRECTORY, TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
2 FROM T_LOAD_LOB;
ID NAME DIRECTORY TO_CHAR(SYSDATE,'YY
---------- ------------------------------- ----------------------------
-------------------
1 2006年總結.doc d:\study\yangtk\others\ 2011-08-07 22:42:01
2 2007Oracle開發者大會(一).doc d:\study\yangtk\others\ 2011-08-07 22:42:01
3 2007Oracle開發者大會(二).doc d:\study\yangtk\others\ 2011-08-07 22:42:01
4 2007年總結.doc d:\study\yangtk\others\ 2011-08-07
22:42:01
.
.
.
74 問題診斷和PLSQL方面.doc d:\study\yangtk\others\ 2011-08-07 22:42:01
已選擇74行。
SQL> CREATE INDEX IND_T_LOB_CONTENTS
2
ON T_LOAD_LOB(CONTENTS)
3
INDEXTYPE IS CTXSYS.CONTEXT;
索引已建立。
SQL> SELECT COUNT(*)
2
FROM T_LOAD_LOB
3
WHERE CONTAINS (CONTENTS, 'ORACLE') > 0;
COUNT(*)
----------
52
對於檔名和目錄分別儲存的情況,可以利用EXPRESSION來從FULL_NAME中透過SQL函式來獲取需要的資訊,而FULL_NAME定義為BOUNDFILLER,這樣並不需要FULL_NAME在表中存在,還可以使用LOBFILE從FULL_NAME中讀取LOB。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-704370/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用SQLLDR載入包含LOB物件的資料(三)SQL物件
- 利用SQLLDR載入包含LOB物件的資料(一)SQL物件
- 通過SQLLDR匯入LOB資料SQL
- 用sqlloader(sqlldr)裝載LOB資料SQL
- 【sqlldr載入資料】SQL
- 測試TOM=SQLLDR載入日期資料SQL
- expdp測試包含有lob型別的物件型別物件
- sqlldr 載入資料 OGG 是否會同步SQL
- 資料匯入SQLLDRSQL
- 測試TOM==SQLLDR載入固定格式資料SQL
- 測試TOM=SQLLDR使用函式載入資料SQL函式
- Oracle - LOB(大物件資料型別)Oracle物件資料型別
- 測試TOM=用PLSQL載入LOB型別資料SQL型別
- 利用CSV 引擎載入資料
- 解決dbms_lob.loadfromfile載入lob資料後出現亂碼的問題
- sqlldr 匯入資料範例SQL
- 測試TOM=SQLLDR載入內嵌換行符資料SQL
- 文字檔案的資料裝載工具sqlldrSQL
- 採用sqlldr定時將文字檔案載入進入資料庫SQL資料庫
- sqlldr載入效能問題的排查SQL
- ORACLE 的載入工具SQLLDR應用OracleSQL
- 使用oracle sqlldr匯入文字資料的例子OracleSQL
- Oracle lob載入bfile資料到blob欄位中Oracle
- 後設資料值物件如何載入物件
- SQLLDR直接載入能否分批提交?SQL
- oracle資料庫使用sqlldr命令匯入txt資料Oracle資料庫SQL
- 利用IDisposable介面構建包含非託管資源物件物件
- 插入LOB物件的方法物件
- Pytorch系列:(二)資料載入PyTorch
- 生產環境sqlldr載入效能問題及分析之二SQL
- 【實驗】【SQL*Loader】使用SQLLDR將資料載入到CLOB欄位SQL
- 使用sqlldr載入外部檔案中的資料到Oracle中(轉)SQLOracle
- sqlldr批量匯入匯出資料測試SQL
- sqlldr批次匯入匯出資料測試SQL
- sqlldr載入會產生redo嗎?SQL
- 利用ext的combobox載入資料庫資料程式碼例項資料庫
- SQLLDR直接載入幾個引數的測試SQL
- [20140109]sqlldr使用direct=true載入資料的問題.txtSQL