ORACLE数据加载加本,使用oracle sqlldr加载数据
oracle sqlldr 實驗
tab 分隔處理,空格分隔處理,逗號分隔處理
日期列處理
截斷處理
包含雙引號處理
列為空處理
1.數據文件data.txt
2012-01-01?10:01:01.001?"1"a"cc"
2012-02-01?10:01:01.002?"2"bc"dd"
2012-03-01?10:01:01.003?"3"cde"ee"
dd
2012-04-01?10:01:01.004?"4"defg"ff"
2012-05-01?10:01:01.005?"5"efgh"gg"
2.控制文件ctl.txt
loaddata
infile?'data.txt'--要導入數據的文件名,也可以是絕對路徑
BADFILE?'bad.bad'--指定出錯的文件名(出錯的記錄會輸出到這個文件)
DISCARDFILE?'disc.dsc'--指不合條件的記錄會輸出到這個文件
truncateintotablet_sqlldr--truncate?table?t_sqlldr后,再導入數據
WHEN(id?!='1')AND(col2?!='cc')--指定哪些記錄需要導入,如果導入全部記錄可省略
fields?terminated?by'?'--數據列以空格分隔
optionally?enclosed?by'"'--如果數據文件中的各數據列以逗號包圍,則可以添加此選項,否則可不添加
(col_date?position(1:19)?date"yyyy-mm-dd?hh24:mi:ss",--指定數據文件中日期/時間格式,并只取前19個字符
field1?filler,????????????????????????????????????????????--數據文件中的日期不僅只有19個字符,把后面的字符過濾掉
id??,
col1?,
col2
)
3.執行sqlldr
F:\sqlldr_test1>sqlldr?t_sqlldr/t_sqlldr@oralife?control=ctl.txt?log=log.txt
SQL*Loader:?Release?10.2.0.1.0?-?Production?on星期六?9月?1?13:10:45?2012
Copyright?(c)?1982,?2005,?Oracle.??Allrights?reserved.
達到提交點?-?邏輯記錄計數?5
達到提交點?-?邏輯記錄計數?6
4.查看數據,可知我們需要的數據已經加載了
SQL>?desct_sqlldr
名稱??????????????????????????????????????是否為空??類型
-----------------------------------------?--------?----------------------------
ID?????????????????????????????????????????????????NUMBER(38)
COL1???????????????????????????????????????????????VARCHAR2(10)
COL_DATE???????????????????????????????????????????DATE
COL2???????????????????????????????????????????????VARCHAR2(5)
SQL>?select*fromt_sqlldr;
ID?COL1???????COL_DATE????????????COL2
----------?----------?-------------------?-----
2?bc?????????2012-02-01?10:01:01?dd
3?cde????????2012-03-01?10:01:01?ee
4?defg???????2012-04-01?10:01:01?ff
5?efgh???????2012-05-01?10:01:01?gg
日志文件的輸出log.txt
SQL*Loader: Release 10.2.0.1.0 - Production on 星期六 9月 1 13:10:45 2012
Copyright (c) 1982, 2005, Oracle.? All rights reserved.
控制文件:????? ctl.txt
數據文件:????? data.txt
錯誤文件:??? bad.bad
廢棄文件:??? disc.dsc
(可廢棄所有記錄)
要加載的數: ALL
要跳過的數: 0
允許的錯誤: 50
綁定數組: 64 行, 最大 256000 字節
繼續:??? 未作指定
所用路徑:?????? 常規
表 T_SQLLDR,已加載在ID != 0X31(字符 '1')
和COL2 != 0X6363(字符 'cc')
插入選項對此表 TRUNCATE 生效
列名??????????????????????? 位置????? 長度? 中止 包裝數據類型
------------------------------ ---------- ----- ---- ---- ---------------------
COL_DATE???????????????????????????? 1:19??? 19? WHT O (") DATE yyyy-mm-dd hh24:mi:ss
FIELD1?????????????????????????????? NEXT???? *? WHT O (") CHARACTER
(FILLER FIELD)
ID?????????????????????????????????? NEXT???? *? WHT O (") CHARACTER
COL1???????????????????????????????? NEXT???? *? WHT O (") CHARACTER
COL2???????????????????????????????? NEXT???? *? WHT O (") CHARACTER
記錄 1: 被廢棄 - 所有 WHEN 子句失敗。
記錄 4: 被拒絕 - 表 T_SQLLDR 的列 FIELD1 出現錯誤。
在邏輯記錄結束之前未找到列 (使用 TRAILING NULLCOLS)
表 T_SQLLDR:
4 行 加載成功。
由于數據錯誤, 1 行 沒有加載。
由于所有 WHEN 子句失敗, 1 行 沒有加載。
由于所有字段都為空的, 0 行 沒有加載。
為綁定數組分配的空間:???????????????? 50944 字節 (64 行)
讀取?? 緩沖區字節數: 1048576
跳過的邏輯記錄總數:????????? 0
讀取的邏輯記錄總數:???????????? 6
拒絕的邏輯記錄總數:????????? 1
廢棄的邏輯記錄總數:??????? 1
從 星期六 9月? 01 13:10:45 2012 開始運行
在 星期六 9月? 01 13:10:45 2012 處運行結束
經過時間為: 00: 00: 00.14
CPU 時間為: 00: 00: 00.10
發生錯誤的記錄會輸出到錯誤文件bad.bad中
dd
不合條件的記錄會輸出到disc.dsc中 2012-01-01 10:01:01.001 "1" a "cc" 如果數據文件中的數據以tab分隔,使用 terminated by X'09' 或 terminated by whitespace。 如果數據文件都是固定長度的數據,可以使用position(n1:n2)選項。 在執行sqlldr時指定direct=true 以直接路徑加載數據。
總結
以上是生活随笔為你收集整理的ORACLE数据加载加本,使用oracle sqlldr加载数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle未找到时区,Oracle A
- 下一篇: 明年起 汽油机颗粒捕集器/汽车用电子节气