最近在項目遇到了oralce需要導入50多萬條數據的需求,使用insert語句1萬條數據差不多最快需要30秒,那么50次呢...效率太低。通過在網上查閱資料找到了一個比較高效的方法。具體操作如下:
1. 需要導入數據的表先創建好
比如說需要導入數據的表BJ_TD_TXBH有2列,字段為GUID、TXBH。
創建表的sql(沒有考慮添加主鍵,如果添加主鍵GUID,那么要確保導入50萬條的數據GUID唯一)
-- Create table
create table BJ_TD_TXBH
(
GUID varchar2(50),
TXBH varchar2(50)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 8
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column BJ_TD_TXBH.GUID
is 'GUID';
comment on column BJ_TD_TXBH.TXBH
is '圖形編號';
創建完成之后,查詢沒有數據。
2.創建好表之后,將需要導入的2列數據保存到.txt文件,使用逗號隔開。
txt文件插入13000條數據
將需要導入的2列數據排列格式效果如圖(文件名為txbh.txt):
tip:
因為我這邊提供的數據是從excel復制過來的,怎么將50多萬條數據GUID和TXBH中間加逗號呢?
方法如圖:
3.編寫自動入庫腳本.ctl
--編寫 insert.ctl 文件
load data
characterset utf8
INFILE 'D:/sql/txbh.txt'
Append into table bj_td_txbh
fields terminated by ","
(
guid,txbh
)
上效果圖,並語法解釋:
編寫好.ctl文件和.txt文件之后,放入到D:/sql文件中。
4.執行腳本
執行腳本語法:
sqlldr userid=用戶名/密碼@數據庫實例名 control=腳本名
執行結果(測試插入了13000條數據):
5.注意事項
1.當時在服務器操作的時候,使用記事本打開.ctl文件之后可能會損壞文件格式,執行腳本會報錯。建議使用編譯器或者notepad++來進行操作。