Linux環境下sqlldr一個csv檔案
本來是練習三思的書裡一個sqlldr的小示例,就是把excel檔案另存為csv後通過sqlldr載入到oracle資料庫中。其目的本來是為了演示一下csv檔案的sqlldr以及csv檔案中的字串中存在逗號, 和雙引號”的處理方法,結果卻引出了一個讓我困惑了一陣子的問題,說大不大說小不小,反覆測試了一番,懷疑到了一個點上,最後一查果然是那個樣子,再測試就通過了,下面總結一下。
順便記錄一個:
三思說要建立scott這個經典的schema要執行$ORACLE_HOME/rdbms/admin/scott.sql這個指令碼的內容,而實際上我並沒找到這個指令碼,找到並執行的是utlsampl.sql
excel是這樣子的:
SMITH | CLEAK | 3904 |
ALLEN | SALER,M | 2891 |
WARD | SALER,"S" | 3128 |
KING | PRESIDENT | 2523 |
另存為'ldr_case2.csv'後內容是:
SMITH,CLEAK,3904
ALLEN,"SALER,M",2891
WARD,"SALER,""S""",3128
KING,PRESIDENT,2523
一切看起都挺正常的,然後將csv上傳到Oracle所在的linux伺服器上,寫好control檔案:
load data
infile 'ldr_case2.csv'
truncate into table bonus
fields terminated by ',' optionally enclosed by '"'
(ename,job,sal)
執行載入後日志顯示為失敗:
Table BONUS, loaded from every logical record.
Insert option in effect for this table: TRUNCATE
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
ENAME FIRST * , O(") CHARACTER
JOB NEXT * , O(") CHARACTER
SAL NEXT * , O(") CHARACTER
Record 1: Rejected - Error on table BONUS, column SAL.
ORA-01722: invalid number
Record 2: Rejected - Error on table BONUS, column SAL.
ORA-01722: invalid number
Record 3: Rejected - Error on table BONUS, column SAL.
ORA-01722: invalid number
Record 4: Rejected - Error on table BONUS, column SAL.
ORA-01722: invalid number
反覆測試後,終於發現我把檔案中的內容放到在linux下新建的檔案中,載入OK,但是看起內容一樣的csv怎麼改都不行,我就懷疑看起來一樣的東西是不是隱藏了什麼不為我察覺的差異。帶著這個疑問上網搜尋了一下,果然有人遇到相同的問題,隱藏的差異就是csv檔案行末藏了回車符。在linux下檢視對比:
[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.csv
SMITH,CLEAK,3904^M
ALLEN,"SALER,M",2891^M
WARD,"SALER,""S""",3128^M
KING,PRESIDENT,2523^M
[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.dat0
SMITH,CLEAK,3904
ALLEN,"SALER,M",2891
WARD,"SALER,""S""",3128
KING,PRESIDENT,2523
原來作祟的就是檔案行末的^M啊!!!
把csv檔案轉一下格式:
[oracle@nathan-rhel5 ~]$ dos2unix ldr_case2.csv
dos2unix: converting file ldr_case2.csv to UNIX format ...
[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.csv
SMITH,CLEAK,3904
ALLEN,"SALER,M",2891
WARD,"SALER,""S""",3128
KING,PRESIDENT,2523
然後再重新載入一次資料成功了:
[oracle@nathan-rhel5 ~]$ vi ldr_case2.ctl
load data
infile 'ldr_case2.csv'
truncate into table bonus
fields terminated by ',' optionally enclosed by '"'
(ename,job,sal)
[oracle@nathan-rhel5 ~]$ sqlldr scott/tiger control=ldr_case2.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Sat Feb 22 22:47:31 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 4
[oracle@nathan-rhel5 ~]$ vi ldr_case2.log
Control File: ldr_case2.ctl
Data File: ldr_case2.csv
Bad File: ldr_case2.bad
Discard File: none specified
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional
Table BONUS, loaded from every logical record.
Insert option in effect for this table: TRUNCATE
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
ENAME FIRST * , O(") CHARACTER
JOB NEXT * , O(") CHARACTER
SAL NEXT * , O(") CHARACTER
Table BONUS:
4 Rows successfully loaded.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26521853/viewspace-1086264/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個CSV檔案解析類
- Linux 環境下 Makefile 檔案製作淺談(一)(轉)Linux
- linux環境下使用XFS檔案系統(轉)Linux
- Linux 環境下 Makefile 檔案製作淺談(二)(轉)Linux
- 在Linux系統環境下使用GFS檔案系統Linux
- Unix環境和Windows環境下Oracle引數檔案位置:WindowsOracle
- 在Linux下ssh 環境的登入 和 檔案拷貝Linux
- django下載csv檔案筆記Django筆記
- 開發環境下PP檔案的建立開發環境
- Oracle 11g Dataguard環境下資料檔案、日誌檔案管理(下)Oracle
- SQLLDR-CTL檔案SQL
- 在Linux環境下使用OpenSSL對訊息和檔案進行加密Linux加密
- linux環境下phpize使用的一個小技巧分享給大家LinuxPHP
- Python合併多個csv檔案Python
- 域環境下如何保護重要資料檔案的安全(一)—EFS加密(下)加密
- Linux中利用csvquote處理csv檔案Linux
- 簡單介紹Linux環境變數檔案Linux變數
- 下載內表到本地.CSV檔案中
- 在exadata環境下配置dbfs檔案系統
- Laravel5.4 不同環境下 env 檔案設定Laravel
- Windows環境下無縫切換Listener log檔案Windows
- Linux環境下:程式的連結, 裝載和庫[ELF檔案詳解]Linux
- linux下配置java環境LinuxJava
- linux 下搭建php環境LinuxPHP
- Linux下NDK環境搭建!Linux
- csv是什麼格式檔案 csv檔案是什麼意思
- Linux環境下的一個rman備份的例項指令碼Linux指令碼
- Modern CSV for mac CSV檔案編輯器Mac
- 生產環境sqlldr載入效能問題及分析之一SQL
- oracle sqlldr控制檔案模板OracleSQL
- RAC環境重建控制檔案
- pandas操作csv檔案
- Java環境下載、配置環境、編寫我的第一個Java程式Java
- Linux MC——終端環境的檔案管理器Linux
- csv檔案用什麼開啟 csv是什麼格式檔案
- Oracle 11g Dataguard環境下資料檔案、日誌檔案管理(上)Oracle
- Windows 下如何使用 Linux 環境開發 PHP 專案!WindowsLinuxPHP
- RAC 環境下修改歸檔模式模式