oracle sqlldr匯入資料

2021-10-07 14:49:57 字數 2751 閱讀 5273

執行命令:

sqlldr userid=epay/epay control=/tmp/test.ctl log=/tmp/test.log data=/tmp/test.csv rows=10

命令引數:

userid -- oracle 的 username/password[@servicename]

control -- 控制檔案,可能包含表的資料

log -- 記錄匯入時的日誌檔案,預設為 控制檔案(去除副檔名).log

bad -- 壞資料檔案,預設為 控制檔案(去除副檔名).bad

data -- 資料檔案,一般在控制檔案中指定。用引數控制檔案中不指定資料檔案更適於自動操作

errors -- 允許的錯誤記錄數,可以用他來控制一條記錄都不能錯

rows -- 多少條記錄提交一次,預設為 64

skip -- 跳過的行數,比如匯出的資料檔案前面幾行是表頭或其他描

ctl指令碼

load data

-- 1) insert --為預設方式,在資料裝載開始時要求表為空

-- 3) replace --刪除舊記錄(用 delete from table 語句),替換成新裝載的記錄

-- 4) truncate --刪除舊記錄(用 truncate table 語句),替換成新裝載的記錄

fields terminated by ' ' -- 資料分隔符

trailing nullcols

(id,cust_num,card_no,mer_day_amt,mer_day_amt_date date "yyyy-mm-dd hh24")

csv資料

1 606110048163089 6218710000005136 3 2017-01-01

1 606110048163089 6218710000005136 3 2017-01-01

1 606110048163089 6218710000005136 3 2017-01-01

1 606110048163089 6218710000005136 3 2017-01-01

複雜例項:

資料:

insert into users values(1,'unmi',3,sysdate); 

insert into users values(2,null,5,to_date('2008-10-15','yyyy-mm-dd'));

insert into users values(3,'隔葉黃鶯',8,to_date('2009-01-02','yyyy-mm-dd'));

insert into users values(4,'kypfos',null,null);

insert into users values(5,'不知秋',1,to_date('2008-12-23','yyyy-mm-dd'));

" ","user_id","user_name","login_times","last_login"

"1","1","unmi","3","2009-1-5 20:34:44"

"2","2","","5","2008-10-15"

"3","3","隔葉黃鶯","8","2009-1-2"

"4","4","kypfos","",""

"5","5","不知秋","1","2008-12-23"

ctl指令碼(資料存放在指令碼中也可分離出)

options (skip=1,rows=128) -- sqlldr 命令顯示的選項可以寫到這裡邊來,skip=1 用來跳過資料中的第一行 

load data

infile * -- 因為資料同控制檔案在一起,所以用 * 表示

into table users

when login_times<>'8' -- 還可以用 when 子句選擇匯入符合條件的記錄

fields terminated by ","

trailing nullcols

( virtual_column filler, --跳過由 pl/sql developer 生成的第一列序號

user_id "user_seq.nextval", --這一列直接取序列的下一值,而不用資料中提供的值

user_name "'hi '||upper(:user_name)",--,還能用sql函式或運算對資料進行加工處理

login_times terminated by ",", nullif(login_times='null') --可為列單獨指定分隔符

last_login date "yyyy-mm-dd hh24:mi:ss" nullif (last_login="null") -- 當字段為"null"時就是 null

) begindata --資料從這裡開始

,user_id,user_name,login_times,last_login

1,1,unmi,3,2009-1-5 20:34

2,2,fantasia,5,2008-10-15

3,3,隔葉黃鶯,8,2009-1-2

4,4,kypfos,null,null

5,5,不知秋,1,2008-12-23

執行命令

sqlldr user/passwd@dbservice control=users.ctl

oracle sqlldr匯入匯出

目錄 匯入例項 常見問題解決辦法 1 匯出大字段 2 換號符處理 3 資料檔案的字段超出最大長度 4 ora 12899 列的值太大 5 遇到特殊字元 處理 參考 sqlldr 資料型別 sqlldr 配置引數 qlplus 中執行sql 遇到特殊字元 處理 oracle 匯出 字元超長處理 開啟命...

oracle sqlldr 匯入亂碼問題

具體情況,見附件,附件內有截圖。問題 oralce 使用 sqlldr 匯入資料 匯入成功後,進入相關的表中查詢為亂碼。a bss.ctl檔案內容 load data characterset utf8 infile bss.txt fields terminated by phone type c...

Oracle Sqlldr 無錯誤異常退出

最近在實施乙個oracle專案時,在測試oracle sqlldr資料裝載時,根據機器效能調優引數如下 direct true stremsize 1g,date cache 1000,columnarrayrows 5000000,readsize 1g,multithreading true,p...