Oracle sqlldr命令

來源:互聯網
上載者:User

標籤:

今天別人的入庫代碼,看的真有點暈,最後看完才知道是用了sqlldr命令。哎。。。還是學藝不精啊,今後還是要多努力。

總結哈sqlldr命令:雖然大多是網上來的,自己要有體會嘛 !開源就是好啊。

sqlldr是cmd下的命令,用來將文字格式設定資料匯入到資料庫中。
命令格式:
sqlldr username/[email protected] control=*.ctl

*.ctl格式為:
load data
infile"d://test.txt"   外部資料檔案
infile "d://test1.txt"  可指定多個資料檔案
append into table test  向表中追加資料
fields terminated by","   外部檔案的資料以“,”分隔
OPTIONALLY ENCLOSED BY‘"‘  部分欄位可以用雙引號包起來
trailingnullcols       表中的欄位沒有對應的值時填充空值
(
id integerexternal,   integer external 表示插入的資料是string,如果只保留integer,表示插入的資料是二進位
name"upper(:name)",    將插入的值轉換為大寫
con":id||:name",       表中CON列的值是ID和NAME的組合值
dtdate"yyyy-mm-dd"     插入日期型資料
)
說明:
load data
告訴SQLLDR要做什麼(在這個例子中,則指示要載入資料)。SQLLDR還可以執行CONTINUE_LOAD,也就是繼續載入。只有在繼續一個多表直接路徑載入時才能使用後面這個選項
INFILE *:如果是*號,這會告訴SQLLDR所要載入的資料實際上包含在控制檔案本身上,例見下一文。如上例指定包含資料的另一個檔案的檔案名稱。如果願意,可以使用一個命令列參數覆蓋這個INFILE語句。要當心,命令列選項總會涵蓋控制檔案設定
在append的位置還可以用以下列表中的一個值:
insert  向表中插入值,但要求表開始時為空白,預設的載入選項
replacedelete表中的資料,然後插入新值,記錄多時速度慢
append  向表中追加資料
truncatetrunctate表,然後插入新值,不能回退
FIELDS TERMINATED BY‘,’:告訴SQLLDR資料的形式應該是用逗號分隔的值。為SQLLDR描述輸入資料的方式有數十種;這隻是其中較為常用的方法之一。
    TERMINATED BYWHITESPACE會解析這個串,尋找空白符(定位字元、空格和分行符號)的第一次出現,然後繼續尋找,直至找到下一個非空白符。
(id integer external,
.....
dtdate"yyyy-mm-dd"):告訴SQLLDR所要載入的列、這些列在輸入資料中的順序以及資料類型。這是指輸入資料流中資料的資料類型,而不是資料庫中的資料類型。列的資料類型預設為CHAR(255)

    載入這樣的定界資料時,很可能想逃過輸入記錄中的某些列。例如,你可能載入欄位1、3和5,而跳過第2列和第4列。為此,SQLLDR提供了FILLER關鍵字。這允許你映射一個輸入記錄中的一列,但不把它放在資料庫中。


例:
C:\>sqlldr scott/tiger control=d:/dept.ctllog=d:/sqlldr.log

dept.ctl的內容如下:

load date
infile"d://test.txt"   
append into table tt
fields terminated by ","  
trailingnullcols      
(
id integer external,  
name"upper(:name)",    
con":id||:name",      
dtdate"yyyy-mm-dd"     
)

test.txt的資料如下
1,a,,2007-07-8
2,b,,2008-07-8
3,c,,2009-07-8

附錄:有效關鍵字:方便今後使用和查詢。

       userid -- ORACLE 使用者名稱/口令            control -- 控制檔案名稱                        log -- 記錄檔名                            bad -- 錯誤檔案名稱                          data -- 資料檔案名                      discard -- 廢棄檔案名稱 discardmax -- 允許廢棄的檔案的數目         (全部預設)        skip -- 要跳過的邏輯記錄的數目  (預設 0)        load -- 要載入的邏輯記錄的數目  (全部預設)      errors -- 允許的錯誤的數目         (預設 50)        rows -- 常規路徑綁定數組中或直接路徑儲存資料間的行數                 (預設: 常規路徑 64, 所有直接路徑)    bindsize -- 常規路徑綁定數組的大小 (以位元組計)  (預設 256000)      silent -- 運行過程中隱藏訊息 (標題,反饋,錯誤,廢棄,分區)      direct -- 使用直接路徑                     (預設 FALSE)     parfile -- 參數檔案: 包含參數說明的檔案的名稱    parallel -- 執行並行載入                    (預設 FALSE)        file -- 要從以下對象中分配區的檔案     skip_unusable_indexes -- 不允許/允許使用無用的索引或索引分割區  (預設 FALSE) skip_index_maintenance -- 沒有維護索引, 將受到影響的索引標記為無用  (預設 FALSE) commit_discontinued -- 提交載入中斷時已載入的行  (預設 FALSE)    readsize -- 讀取緩衝區的大小               (預設 1048576) external_table -- 使用外部表格進行載入; NOT_USED, GENERATE_ONLY, EXECUTE  (預設 NOT_USED) columnarrayrows -- 直接路徑列數組的行數  (預設 5000) streamsize -- 直接路徑流緩衝區的大小 (以位元組計)  (預設 256000) multithreading -- 在直接路徑中使用多線程   resumable -- 啟用或禁用當前的可恢複會話  (預設 FALSE) resumable_name -- 有助於標識可恢複語句的文本字串 resumable_timeout -- RESUMABLE 的等待時間 (以秒計)  (預設 7200) date_cache -- 日期轉換快取的大小 (以條目計)  (預設 1000) no_index_errors -- 出現任何索引錯誤時中止載入  (預設 FALSE)  PLEASE NOTE: 命令列參數可以由位置或關鍵字指定 。前者的例子是 ‘sqlldr scott/tiger foo ‘; 後一種情況的一個樣本是 ‘ sqlldr control=foo userid=scott/tiger‘。位置指定參數的時間必須早於 但不可遲於由關鍵字指定的參數。例如, 允許 ‘sqlldr scott/tiger control=foo logfile=log‘ , 但是 不允許 ‘sqlldr scott/tiger control=foo log‘ , 即使 參數 ‘log‘ 的位置正確。   

 

Oracle sqlldr命令

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.