sqlldr使用簡介

--------------------------------------------------------------------------------
SQL*Loader: Release 11.2.0.1.0 - Production on 星期六 8月 4 12:54:31 2012
 
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
 
 
用法: SQLLDR keyword=value [,keyword=value,...]
 
有效的關鍵字: 
 
    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' 的位置正確。
--------------------------------------------------------------------------------


**控制文件描述
--------------------------------------------------------------------------------
LOAD DATA 
INFILE 't.dat' // 要導入的文件 
// INFILE 'tt.date' // 導入多個文件 
// INFILE * // 要導入的內容就在control文件裏 下面的BEGINDATA後面就是導入的內容, *和't.dat'不能同時存在

INTO TABLE table_name // 指定裝入的表 
BADFILE 'c:bad.txt' // 指定壞文件地址 

************* 以下是4種裝入表的方式 
APPEND // 原先的表有數據 就加在後面 
// INSERT // 裝載空表 如果原先的表有數據 sqlloader會停止 默認值 
// REPLACE // 原先的表有數據 原先的數據會全部刪除 
// TRUNCATE // 指定的內容和replace的相同 會用truncate語句刪除現存數據 

************* 指定的TERMINATED可以在表的開頭 也可在表的內部字段部分 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
// 裝載這種數據: 10,lg,"""lg""","lg,lg" 
// 在表中結果: 10 lg "lg" lg,lg 
// TERMINATED BY X '09' // 以十六進制格式 '09' 表示的 
// TERMINATED BY WRITESPACE // 裝載這種數據: 10 lg lg 
// OPTIONALLY ENCLOSED BY '"' //表明每個字段可以用雙引號括起

TRAILING NULLCOLS ************* 表的字段沒有對應的值時允許爲空 

************* 下面是表的字段 
( 
col_1 , col_2 ,col_filler FILLER // FILLER 關鍵字 此列的數值不會被裝載 
// 如: lg,lg,not 結果 lg lg 
) 
// 當沒聲明FIELDS TERMINATED BY ',' 時 
// ( 
// col_1 [interger external] TERMINATED BY ',' , 
// col_2 [date "dd-mon-yyy"] TERMINATED BY ',' , 
// col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg' 
// ) 
// 當沒聲明FIELDS TERMINATED BY ','用位置告訴字段裝載數據 
// ( 
// col_1 position(1:2), 
// col_2 position(3:10), 
// col_3 position(*:16), // 這個字段的開始位置在前一字段的結束位置 
// col_4 position(1:16), 
// col_5 position(3:10) char(8) // 指定字段的類型 
// ) 

BEGINDATA // 對應開始的 INFILE * 要導入的內容就在control文件裏 
10,Sql,what 
20,lg,show 

--------------------------------------------------------------------------------

**實際例子
--------------------------------------------------------------------------------
-- Why do I receive "exceeds maximum length" in my log file?
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ','
(DEPTNO, DNAME char(1000), LOC )
BEGINDATA
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance more text more text more text more ... <repeated many times> ... more text,Virginia
--------------------------------------------------------------
-- How Do I Load Delimited Data? quotes example
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO, DNAME, LOC )
BEGINDATA
10,Sales,"Virginia,USA"
20,Accounting,"Va, ""USA"""
30,Consulting,Virginia
40,Finance,Virginia
--------------------------------------------------------------
-- How Do I Load Delimited Data? tabs example
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY WHITESPACE
(DEPTNO, DNAME, LOC)
BEGINDATA
10		Sales		Virginia
--------------------------------------------------------------
-- How Do I Load Delimited Data? X'09' example
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY X'09'
(DEPTNO, DNAME, LOC )
BEGINDATA
10		Sales		Virginia
--------------------------------------------------------------
-- How Do I Load Delimited Data? X'09' skip column example
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY x'09'
(DEPTNO, dummy1 filler, DNAME, dummy2 filler, LOC)
BEGINDATA
10		Sales		Virginia
--------------------------------------------------------------
-- How Do I Load Fixed Format Data?
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
( DEPTNO position(1:2),
  DNAME  position(3:16),
  LOC    position(17:29)
)
BEGINDATA
10Accounting    Virginia,USA
--------------------------------------------------------------
-- How Do I Load Fixed Format Data? with entire_line, relative offset, example 1
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
( DEPTNO      position(1:2),
  DNAME       position(*:16),
  LOC         position(*:29),
  ENTIRE_LINE position(1:29)
)
BEGINDATA
10Accounting    Virginia,USA
--------------------------------------------------------------
-- How Do I Load Fixed Format Data? with entire_line, relative offset, example 2
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
( DEPTNO      position(1) char(2),
  DNAME       position(*) char(14),
  LOC         position(*) char(13),
  ENTIRE_LINE position(1) char(29)
)
BEGINDATA
10Accounting    Virginia,USA
--------------------------------------------------------------
-- How Do I Load Dates?
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
(DEPTNO,
  DNAME,
  LOC,
  LAST_UPDATED date 'dd/mm/yyyy'
)
BEGINDATA
10,Sales,Virginia,1/5/2014
20,Accounting,Virginia,21/6/2014
30,Consulting,Virginia,5/1/2013
40,Finance,Virginia,15/3/2014
--------------------------------------------------------------
-- How Do I Load Data Using Functions?
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
(DEPTNO,
  DNAME        "upper(:dname)",
  LOC          "upper(:loc)",
  LAST_UPDATED date 'dd/mm/yyyy'
)
BEGINDATA
10,Sales,Virginia,1/5/2014
20,Accounting,Virginia,21/6/2014
30,Consulting,Virginia,5/1/2013
40,Finance,Virginia,15/3/2014
--------------------------------------------------------------
-- How Do I Load Data Using Functions?, using trailing nullcols
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
  DNAME        "upper(:dname)",
  LOC          "upper(:loc)",
  LAST_UPDATED date 'dd/mm/yyyy',
  ENTIRE_LINE  ":deptno||:dname||:loc||:last_updated"
)
BEGINDATA
10,Sales,Virginia,1/5/2014
20,Accounting,Virginia,21/6/2014
30,Consulting,Virginia,5/1/2013
40,Finance,Virginia,15/3/2014
--------------------------------------------------------------
-- How Do I Load Data Using Functions?, CASE example 
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
  DNAME        "upper(:dname)",
  LOC          "upper(:loc)",
  LAST_UPDATED
"case
 when length(:last_updated) > 9
 then to_date(:last_updated,'hh24:mi:ss dd/mm/yyyy')
 when instr(:last_updated,':') > 0
 then to_date(:last_updated,'hh24:mi:ss')
 else to_date(:last_updated,'dd/mm/yyyy')
 end"
)
BEGINDATA
10,Sales,Virginia,12:03:03 17/10/2014
20,Accounting,Virginia,02:23:54
30,Consulting,Virginia,01:24:00 21/10/2014
40,Finance,Virginia,17/8/2014
--------------------------------------------------------------
-- How Do I Load Data with Embedded Newlines? Use a Character Other Than a Newline
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
  DNAME        "upper(:dname)",
  LOC          "upper(:loc)",
  COMMENTS     "replace(:comments,'\\n',chr(10))"
)
BEGINDATA
10,Sales,Virginia,This is the Sales\nOffice in Virginia
20,Accounting,Virginia,This is the Accounting\nOffice in Virginia
30,Consulting,Virginia,This is the Consulting\nOffice in Virginia
40,Finance,Virginia,This is the Finance\nOffice in Virginia
--------------------------------------------------------------
-- How Do I Load Data with Embedded Newlines? Use the FIX Attribute 
LOAD DATA
INFILE demo.dat "fix 80"
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
  DNAME        "upper(:dname)",
  LOC          "upper(:loc)",
  COMMENTS
)
--------------------------------------------------------------
-- How Do I Load Data with Embedded Newlines? Use the VAR Attribute 
LOAD DATA
INFILE demo.dat "var 3"
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
  DNAME        "upper(:dname)",
  LOC          "upper(:loc)",
  COMMENTS
)
--------------------------------------------------------------
-- How Do I Load Data with Embedded Newlines? Use the STR Attribute
LOAD DATA
INFILE demo.dat "str X'7C0A'"
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
  DNAME        "upper(:dname)",
  LOC          "upper(:loc)",
  COMMENTS
)
--------------------------------------------------------------
-- Loading LOB Data via SQLLDR, Loading LOB Data That Is Inline
LOAD DATA
INFILE demo.dat "str X'7C0A'"
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(DEPTNO,
  DNAME        "upper(:dname)",
  LOC          "upper(:loc)",
  COMMENTS     char(1000000)
)
--------------------------------------------------------------
create table lob_demo
  ( owner      varchar2(255),
    time_stamp date,
    filename   varchar2(255),
    data       blob
)
/

-- Loading LOB Data via SQLLDR, Loading LOB Data That Is Out of Line
LOAD DATA
INFILE *
REPLACE
INTO TABLE LOB_DEMO
( owner       position(14:19),
  time_stamp  position(30:41) date "Mon DD HH24:MI",
  filename    position(43:100),
  data        LOBFILE(filename) TERMINATED BY EOF
)
BEGINDATA
-rwxr-xr-x 1 oracle dba 14889 Jul 22 22:01 demo1.log_xt
-rwxr-xr-x 1 oracle dba   123 Jul 22 20:07 demo2.ctl
-rwxr-xr-x 1 oracle dba   712 Jul 23 12:11 demo.bad
-rwxr-xr-x 1 oracle dba  8136 Mar  9 12:36 demo.control_files
-rwxr-xr-x 1 oracle dba   825 Jul 23 12:26 demo.ctl
-rwxr-xr-x 1 oracle dba  1681 Jul 23 12:26 demo.log
-rw-r----- 1 oracle dba   118 Jul 23 12:52 dl.sql
-rwxr-xr-x 1 oracle dba   127 Jul 23 12:05 lob_demo.sql
-rwxr-xr-x 1 oracle dba   171 Mar 10 13:53 p.bsh
-rwxr-xr-x 1 oracle dba   327 Mar 10 11:10 prime.bsh
-rwxr-xr-x 1 oracle dba    24 Mar  6 12:09 run_df.sh

--------------------------------------------------------------
-- Loading LOB Data via SQLLDR, Loading LOB Data into Object Columns
--------------------------------------------------------------
LOAD DATA
INFILE *
INTO TABLE image_load
REPLACE
FIELDS TERMINATED BY ','
( ID,
  NAME,
  file_name FILLER,
  IMAGE column object
  (
    SOURCE column object
    (
      LOCALDATA LOBFILE (file_name) TERMINATED BY EOF
                NULLIF file_name = 'NONE'
    )
  )
)
BEGINDATA
1,icons,icons.gif
--------------------------------------------------------------------------------

--參考來源《Oracle編程藝術深入理解數據庫體系結構(第三版)》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章