程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

sqlldr詳解

編輯:Oracle數據庫基礎
 

Oracle 的SQL*LOADER可以將外部數據加載到數據庫表中。下面是SQL*LOADER的基本特點:

1)能裝入不同數據類型文件及多個數據文件的數據
2)可裝入固定格式,自由定界以及可度長格式的數據
3)可以裝入二進制,壓縮十進制數據
4)一次可對多個表裝入數據
5)連接多個物理記錄裝到一個記錄中
6)對一單記錄分解再裝入到表中
7)可以用 數對制定列生成唯一的KEY
8)可對磁盤或 磁帶數據文件裝入制表中
9)提供裝入錯誤報告
10)可以將文件中的整型字符串,自動轉成壓縮十進制並裝入列表中。
1.2控制文件
控制文件是用一種語言寫的文本文件,這個文本文件能被SQL*LOADER識別。SQL*LOADER根據控制文件可以找到需要加載的數據。並且分析和解釋這些數據。控制文件由三個部分組成:
l 全局選件,行,跳過的記錄數等;
l INFILE子句指定的輸入數據;
l 數據特性說明。
1.3輸入文件
對於 SQL*Loader, 除控制文件外就是輸入數據。SQL*Loader可從一個或多個指定的文件中讀出數據。如果 數據是在控制文件中指定,就要在控制文件中寫成 INFILE * 格式。當數據固定的格式(長度一樣)時且是在文件中得到時,要用INFILE "fix n"
load data
infile 'example.dat' "fix 11"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
001, cd, 0002,fghi,
00003,lmn,
1, "pqrs",
0005,uvwx,
當數據是可變格式(長度不一樣)時且是在文件中得到時,要用INFILE "var n"。如:
load data
infile 'example.dat' "var 3"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
009hello,cd,010world,im,
012my,name is,
1.4壞文件
壞文件包含那些被SQL*Loader拒絕的記錄。被拒絕的記錄可能是不符合要求的記錄。
壞文件的名字由 SQL*Loader命令的BADFILE 參數來給定。
1.5日志文件及日志信息
當SQL*Loader 開始執行後,它就自動建立 日志文件。日志文件包含有加載的總結,加載中的錯誤信息等。
控制文件語法
控制文件的格式如下:
OPTIONS ( { [SKIP=integer] [ LOAD = integer ]
[ERRORS = integer] [ROWS=integer]
[BINDSIZE=integer] [SILENT=(ALL|FEEDBACK|ERROR|DISCARD) ] )
LOAD[DATA]
[ { INFILE | INDDN } {file | * }
[STREAM | RECORD | FIXED length [BLOCKSIZE size]|
VARIABLE [length] ]
[ { BADFILE | BADDN } file ]
{DISCARDS | DISCARDMAX} integr ]
[ {INDDN | INFILE} . . . ]
[ APPEND | REPLACE | INSERT ]
[RECLENT integer]
[ { CONCATENATE integer |
CONTINUEIF { [THIS | NEXT] (start[: end])LAST }
Operator { 'string' | X 'hex' } } ]
INTO TABLE [user.]table
[APPEND | REPLACE|INSERT]
[WHEN condition [AND condition]...]
[FIELDS [delimiter] ]
(
column {
RECNUM | CONSTANT value |
SEQUENCE ( { integer | MAX |COUNT} [, increment] ) |
[POSITION ( { start [end] | * [ + integer] }
) ]
datatype
[TERMINATED [ BY ] {WHITESPACE| [X] 'character' } ]
[ [OPTIONALLY] ENCLOSE[BY] [X]'charcter']
[NULLIF condition ]
[DEFAULTIF condotion]
}
[ ,...]
)
[INTO TABLE...]
[BEGINDATA]
1)要加載的數據文件:
1.INFILE 和INDDN是同義詞,它們後面都是要加載的數據文件。如果用 * 則表示數據就在控制文件內。在INFILE 後可以跟幾個文件。
2.STRAM 表示一次讀一個字節的數據。新行代表新物理記錄(邏輯記錄可由幾個物理記錄組成)。
3.RECORD 使用宿主操作系統文件及記錄管理系統。如果數據在控制文件中則使用這種方法。
3. FIXED length 要讀的記錄長度為length字節,
4. VARIABLE 被讀的記錄中前兩個字節包含的長度,length 記錄可能的長度。缺傷為8k字節。
5. BADFILE和BADDN同義。Oracle 不能加載數據到數據庫的那些記錄。
6. DISCARDFILE和DISCARDDN是同義詞。記錄沒有通過的數據。
7. DISCARDS和DISCARDMAX是同義詞。Integer 為最大放棄的文件個數。
2)加載的方法:
1.APPEND 給表添加行。
2.INSERT 給空表增加行(如果表中有記錄則退出)。
3.REPLACE 先清空表在加載數據。
4. RECLEN 用於兩種情況,1)SQLLDR不能自動計算記錄長度,2)或用戶想看壞文件的完整記錄時。對於後一種,Oracle只能按常規把壞記錄部分寫到錯誤的地方。如果看整條記錄,則可以將整條記錄寫到壞文件中。
3)指定最大的記錄長度:
1. CONCATENATE 允許用戶設定一個整數,表示要組合邏輯記錄的數目。
4)建立邏輯記錄:
1.THIS 檢查當前記錄條件,如果為真則連接下一個記錄。
2.NEXT 檢查下一個記錄條件。如果為真,則連接下一個記錄到當前記錄來。
2. Start: end 表示要檢查在THIS或NEXT字串是否存在繼續串的列,以確定是否進行連接。如:continueif next(1-3)='WAG' 或continueif next(1-3)=X'0d03if'
5)指定要加載的表:

1.INTO TABLE 要加的表名。
2.WHEN 和select WHERE類似。用來檢查記錄的情況,如:when(3-5)='SSM' and (22)='*"
6)介紹並括起記錄中的字段:
1. FIELDS給出記錄中字段的分隔符,FIELDS格式為:
FIELDS [TERMIALED [BY] {WHITESPACE | [X] 'charcter'} ]  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved