sqlldr詳解2
8 ***** 載入每行的行號
load data
infile *
into table t
replace
( seqno RECNUM //載入每行的行號
text Position(1:1024))
BEGINDATA
fsdfasj //自動分配一行號給載入 表t 的seqno欄位 此行為 1
fasdjfasdfl // 此行為 2 ...
9 ***** 載入有換行符的資料
注意: unix 和 windows 不同 n & /n
< 1 > 使用一個非換行符的字元
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
DNAME "upper(:dname)",
LOC "upper(:loc)",
LAST_UPDATED "my_to_date( :last_updated )",
COMMENTS "replace(:comments,'n',chr(10))" // replace 的使用幫助轉換換行符
)
BEGINDATA
10,Sales,Virginia,01-april-2001,This is the SalesnOffice in Virginia
20,Accounting,Virginia,13/04/2001,This is the AccountingnOffice in Virginia
30,Consulting,Virginia,14/04/2001 12:02:02,This is the ConsultingnOffice in Virginia
40,Finance,Virginia,987268297,This is the FinancenOffice in Virginia
< 2 > 使用fix屬性
LOAD DATA
INFILE demo17.dat "fix 101"
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
DNAME "upper(:dname)",
LOC "upper(:loc)",
LAST_UPDATED "my_to_date( :last_updated )",
COMMENTS
)
demo17.dat
10,Sales,Virginia,01-april-2001,This is the Sales
Office in Virginia
20,Accounting,Virginia,13/04/2001,This is the Accounting
Office in Virginia
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
Office in Virginia
40,Finance,Virginia,987268297,This is the Finance
Office in Virginia
// 這樣裝載會把換行符裝入資料庫 下面的方法就不會 但要求資料的格式不同
LOAD DATA
INFILE demo18.dat "fix 101"
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(DEPTNO,
DNAME "upper(:dname)",
LOC "upper(:loc)",
LAST_UPDATED "my_to_date( :last_updated )",
COMMENTS
)
demo18.dat
10,Sales,Virginia,01-april-2001,"This is the Sales
Office in Virginia"
20,Accounting,Virginia,13/04/2001,"This is the Accounting
Office in Virginia"
30,Consulting,Virginia,14/04/2001 12:02:02,"This is the Consulting
Office in Virginia"
40,Finance,Virginia,987268297,"This is the Finance
Office in Virginia"
< 3 > 使用var屬性
LOAD DATA
INFILE demo19.dat "var 3"
// 3 告訴每個記錄的前3個位元組表示記錄的長度 如第一個記錄的 071 表示此記錄有 71 個位元組
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
DNAME "upper(:dname)",
LOC "upper(:loc)",
LAST_UPDATED "my_to_date( :last_updated )",
COMMENTS
)
demo19.dat
07110,Sales,Virginia,01-april-2001,This is the Sales
Office in Virginia
07820,Accounting,Virginia,13/04/2001,This is the Accounting
Office in Virginia
08730,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
Office in Virginia
07140,Finance,Virginia,987268297,This is the Finance
Office in Virginia
< 4 > 使用str屬性
// 最靈活的一中 可定義一個新的行結尾符 win 回車換行 : chr(13)||chr(10)
此列中記錄是以 a|rn 結束的
select utl_raw.cast_to_raw('|'||chr(13)||chr(10)) from dual;
結果 7C0D0A
LOAD DATA
INFILE demo20.dat "str X'7C0D0A'"
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(DEPTNO,
DNAME "upper(:dname)",
LOC "upper(:loc)",
LAST_UPDATED "my_to_date( :last_updated )",
COMMENTS
)
demo20.dat
10,Sales,Virginia,01-april-2001,This is the Sales
Office in Virginia|
20,Accounting,Virginia,13/04/2001,This is the Accounting
Office in Virginia|
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
Office in Virginia|
40,Finance,Virginia,987268297,This is the Finance
Office in Virginia|
==============================================================================
象這樣的資料 用 nullif 子句
10-jan-200002350Flipper seemed unusually hungry today.
10510-jan-200009945Spread over three meals.
id position(1:3) nullif id=blanks // 這裡可以是blanks 或者別的表示式
// 下面是另一個列子 第一行的 1 在資料庫中將成為 null
LOAD DATA
INFILE *
INTO TABLE T
REPLACE
(n position(1:2) integer external nullif n='1',
v position(3:8)
)
BEGINDATA
1 10
20lg
------------------------------------------------------------
如果是英文的日誌 格式,可能需要修改環境變數 nls_lang or nls_date_format
==========================================================================================================
Oracle SQL*Loader 使用指南(轉載)
SQL*Loader是Oracle資料庫匯入外部資料的一個工具.它和DB2的Load工具相似,但有更多的選擇,它支援變化的載入模式,可選的載入及多表載入.
如何使用 SQL*Loader 工具
我們可以用Oracle的sqlldr工具來匯入資料。例如:
sqlldr scott/tiger control=loader.ctl
控制檔案(loader.ctl) 將載入一個外部資料檔案(含分隔符). loader.ctl如下:
load data
infile 'c:datamydata.csv'
into table emp
fields terminated by "," optionally enclosed by '"'
( empno, empname, sal, deptno )
mydata.csv 如下:
10001,"Scott Tiger", 1000, 40
10002,"Frank Naude", 500, 20
下面是一個指定記錄長度的示例控制檔案。"*" 代表資料檔案與此檔案同名,即在後面使用BEGINDATA段來標識資料。
load data
infile *
replace
into table departments
( dept position (02:05) char(4),
deptname position (08:27) char(20)
)
begindata
COSC COMPUTER SCIENCE
ENGL ENGLISH LITERATURE
MATH MATHEMATICS
POLY POLITICAL SCIENCE
Unloader這樣的工具
Oracle 沒有提供將資料匯出到一個檔案的工具。但是,我們可以用SQL*Plus的select 及 format 資料來輸出到一個檔案:
set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on
spool oradata.txt
select col1 || ',' || col2 || ',' || col3
from tab1
where col2 = 'XYZ';
spool off
另外,也可以使用使用 UTL_FILE PL/SQL 包處理:
rem Remember to update initSID.ora, utl_file_dir='c:oradata' parameter
declare
fp utl_file.file_type;
begin
fp := utl_file.fopen('c:oradata','tab1.txt','w');
utl_file.putf(fp, '%s, %sn', 'TextField', 55);
utl_file.fclose(fp);
end;
/
當然你也可以使用第三方工具,如SQLWays ,TOAD for Quest等。
載入可變長度或指定長度的記錄
如:
LOAD DATA
INFILE *
INTO TABLE load_delimited_data
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
( data1,data2
)
BEGINDATA
11111,AAAAAAAAAA
22222,"A,B,C,D,"
下面是匯入固定位置(固定長度)資料示例:
LOAD DATA
INFILE *
INTO TABLE load_positional_data
( data1 POSITION(1:5),
data2 POSITION(6:15)
)
BEGINDATA
11111AAAAAAAAAA
22222BBBBBBBBBB
跳過資料行:
可以用 "SKIP n" 關鍵字來指定匯入時可以跳過多少行資料。如:
LOAD DATA
INFILE *
INTO TABLE load_positional_data
SKIP 5
( data1 POSITION(1:5),
data2 POSITION(6:15)
)
BEGINDATA
11111AAAAAAAAAA
22222BBBBBBBBBB
匯入資料時修改資料:
在匯入資料到資料庫時,可以修改資料。注意,這僅適合於常規匯入,並不適合 direct匯入方式.如:
LOAD DATA
INFILE *
INTO TABLE modified_data
( rec_no "my_db_sequence.nextval",
regionCONSTANT'31',
time_loaded "to_char(SYSDATE, 'HH24:MI')",
data1 POSITION(1:5) ":data1/100",
data2 POSITION(6:15) "upper(:data2)",
data3 POSITION(16:22)"to_date(:data3, 'YYMMDD')"
)
BEGINDATA
11111AAAAAAAAAA991201
22222BBBBBBBBBB990112
LOAD DATA
INFILE 'mail_orders.txt'
BADFILE 'bad_orders.txt'
APPEND
INTO TABLE mailing_list
FIELDS TERMINATED BY ","
( addr,
city,
state,
zipcode,
mailing_addr "decode(:mailing_addr, null, :addr, :mailing_addr)",
mailing_city "decode(:mailing_city, null, :city, :mailing_city)",
mailing_state
)
將資料匯入多個表:
如:
LOAD DATA
INFILE *
REPLACE
INTO TABLE emp
WHEN empno != ' '
( empno POSITION(1:4) INTEGER EXTERNAL,
ename POSITION(6:15) CHAR,
deptno POSITION(17:18) CHAR,
mgr POSITION(20:23) INTEGER EXTERNAL
)
INTO TABLE proj
WHEN projno != ' '
( projno POSITION(25:27) INTEGER EXTERNAL,
empno POSITION(1:4) INTEGER EXTERNAL
)
匯入選定的記錄:
如下例: (01) 代表第一個字元, (30:37) 代表30到37之間的字元:
LOAD DATA
INFILE 'mydata.dat' BADFILE 'mydata.bad' DISCARDFILE 'mydata.dis'
APPEND
INTO TABLE my_selective_table
WHEN (01) <> 'H' and (01) <> 'T' and (30:37) = '19991217'
(
regionCONSTANT'31',
service_key POSITION(01:11) INTEGER EXTERNAL,
call_b_no POSITION(12:29) CHAR
)
匯入時跳過某些欄位:
可用 POSTION(x:y) 來分隔資料. 在Oracle8i中可以透過指定 FILLER 欄位實現。FILLER 欄位用來跳過、忽略匯入資料檔案中的欄位.如:
LOAD DATA
TRUNCATE INTO TABLE T1
FIELDS TERMINATED BY ','
( field1,
field2 FILLER,
field3
)
匯入多行記錄:
可以使用下面兩個選項之一來實現將多行資料匯入為一個記錄:
CONCATENATE: - use when SQL*Loader should combine the same number of physical records together to form. one logical record.
CONTINUEIF - use if a condition indicates that multiple records should be treated as one. Eg. by having a '#' character in column 1.
SQL*Loader 資料的提交:
一般情況下是在匯入資料檔案資料後提交的。
也可以透過指定 ROWS= 引數來指定每次提交記錄數。
提高 SQL*Loader 的效能:
1) 一個簡單而容易忽略的問題是,沒有對匯入的表使用任何索引和/或約束(主鍵)。如果這樣做,甚至在使用ROWS=引數時,會很明顯降低資料庫匯入效能。
2) 可以新增 DIRECT=TRUE來提高匯入資料的效能。當然,在很多情況下,不能使用此引數。
3) 透過指定 UNRECOVERABLE選項,可以關閉資料庫的日誌。這個選項只能和 direct 一起使用。
4) 可以同時執行多個匯入任務.
常規匯入與direct匯入方式的區別:
常規匯入可以透過使用 INSERT語句來匯入資料。Direct匯入可以跳過資料庫的相關邏輯(DIRECT=TRUE),而直接將資料匯入到資料檔案中
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-705104/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sqlldr詳解SQL
- sqlldr配合shell解決sqlldr 控制檔案中引入變數的方案SQL變數
- HTTP2 詳解HTTP
- webxml配置詳解2WebXML
- Swoft2 配置詳解
- webpack(2)——配置項詳解Web
- Seq2Seq詳解
- DB2 export詳解DB2Export
- DB2 import詳解DB2Import
- Struts2原理詳解
- shell解決我繁瑣的sqlldr操作SQL
- SQLLDR 命令SQL
- SQLLDR 教程SQL
- sqlldr使用SQL
- Sqlldr操作SQL
- P2P技術詳解(一):NAT詳解——詳細原理、P2P簡介(轉)
- React Scheduler 原始碼詳解(2)React原始碼
- Seq2Seq原理詳解
- HTTP/2 Server Push 詳解(下)HTTPServer
- Struts2 XML配置詳解XML
- Statspack分析報告詳解(2)
- web.xml配置詳解2WebXML
- HTTP協議頭詳解 (2)HTTP協議
- struts2標籤詳解 .
- sqlldr的使用SQL
- sqlldr用法全SQL
- sqlldr的例子SQL
- Angular(2+)動畫API用法詳解Angular動畫API
- 屬性配置檔案詳解(2)
- 5.2 以太坊原始碼詳解2原始碼
- HTTP2 協議長文詳解HTTP協議
- oracle-2中commit 詳解OracleMIT
- java集合(2)- java中HashMap詳解JavaHashMap
- POSIX執行緒詳解(2) (轉)執行緒
- dc-2靶機-超詳解
- sqlldr 匯入中文出現亂碼解決方法SQL
- 【SSH2(理論篇)】--Struts2配置詳解
- SQLLDR-樣例SQL