控制檔案是SQL*Loader裡最重要的檔案,它是一個文字檔,用來定義資料檔案的位置、資料的格 式、以及配置資料載入過程的行為,在sqlldr中以control參數指定控制檔案。
在控制檔案裡配置命令列參數 (OPTIONS)
在上一篇中我們講過命令列參數可以配置在三個地方,其中一個就是可以使用控制檔案的OPTIONS字 句(這也是最常用的方式),如下所示:
OPTIONS (DIRECT=true, SILENT=(ERRORS, FEEDBACK) )
更多的命令列參數,請見上一篇。
配置資料檔案(INFILE)
使用INFILE可以配置一個或多個資料檔案,其文法如下:
如果資料包含在控制檔案本身,則用*表示,如:
INFILE *
在控制檔案的末尾,以BEGINDATA開頭,後面接資料:
BEGINDATA data
如果你有多個資料檔案怎麼辦?很簡單,只要多個INFILE即可,而且還可以為每個INFILE指定各自 的錯誤檔案和丟棄檔案等,如下所示:
INFILE mydat1.dat BADFILE mydat1.bad DISCARDFILE mydat1.dis INFILE mydat2.dat INFILE mydat3.dat DISCARDFILE mydat3.dis INFILE mydat4.dat DISCARDMAX 10 0
字元集
如果資料檔案的字元集和資料庫的字元集不一樣,SQL*Loader會自動把資料檔案的字元集轉換成數 據庫的字元集,當然前提條件是資料庫的字元集是資料檔案的字元集的超集。
資料庫的字元集可以通過以下SQL語句查詢:
select * from nls_database_parameters;
資料檔案的字元集可以通過控制檔案中的CHARACTERSET參數配置,其文法如下:
CHARACTERSET char_set_name
如果沒有設定CHARACTERSET參數,資料檔案的字元集由作業系統的NLS_LANG設定。
受到字元集影響的資料類型有:CHAR,VARCHAR,numeric EXTERNAL, datetime, interval
還有一種字元集要特別注意,就是控制檔案本身的字元集(只能由NLS_LANG設定),如果控制檔案 的字元集和資料檔案的不一樣,會先轉換成資料檔案的字元集,但這樣很容易出錯(特別是分隔字元), 因此,實際使用中為了方便,一般把NLS_LANG,CHARACTERSET(如果有的話)設成和資料庫字元集一樣 。