sqlloader
Ⅰ 如何在sqlLoader中裝載日期型的數據
要確保sqlloader時候的環境變數NLS_DATE_FORMAT跟你指定的"dd/Mon/yyyy:hh24:mi:ss"一樣。否則會報日期格式不正確的錯誤。
首先設置操作系統的環境變數NLS_LANG為AMERICAN_AMERICA.ZHS16GBK,UNIX系統在profile中設置,Windows系統在注冊表中設置。
然後,編寫測試用的數據文件,t.txt
aaaaa,xxxxx,2005-01-01 1:00:00
bbbbb,yyyyy,2005-03-01 12:00:00
ccccc,zzzzz,2005-12-01 18:00:00
創建測試表:
create table T_LOAD
(
A VARCHAR2(10),
B VARCHAR2(10),
C DATE
);
編寫sqlldr使用的控制文件
load data
infile 't.txt'
badfile 't.bad'
append into table t_load
fields terminated by ','
trailing nullcols
(
a,
b,
c date "yyyy-mm-dd hh24:mi:ss"
)
開始做sqlldr
sqlldr control=t.ctl
裝載結束以後,查看log文件
SQL*Loader: Release 9.2.0.6.0 - Proction on Mon Jun 6 02:28:39 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Control File: t.ctl
Data File: t.txt
Bad File: t.bad
Discard File: none specified
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional
Table T_LOAD, loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
A FIRST * , CHARACTER
B NEXT * , CHARACTER
C NEXT * , DATE yyyy-mm-dd hh24:mi:ss
Table T_LOAD:
3 Rows successfully loaded.
0 Rows not loaded e to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
Space allocated for bind array: 49536 bytes(64 rows)
Read buffer bytes: 1048576
Total logical records skipped: 0
Total logical records read: 3
Total logical records rejected: 0
Total logical records discarded: 0
Run began on Mon Jun 06 02:28:39 2005
Run ended on Mon Jun 06 02:28:41 2005
Elapsed time was: 00:00:01.38
CPU time was: 00:00:00.04
Ⅱ SQLLOADER 3 指定不裝載哪一列
oracle裝載表即通過sqlloader的方式導入數據。
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'} ]
[ [ OPTIONALLY] ENCLOSE [BY] [X]'charcter' ]
TERMINATED 讀完前一個欄位即開始讀下一個欄位直到介紹。
WHITESPACE 是指結束符是空格的意思。包括空格、Tab、換行符、換頁符及回車符。如果是要判斷但字元,可以用單引號括起,如X'1B'等。
OPTIONALLY ENCLOSED 表示數據應由特殊字元括起來。也可以括在TERMINATED字元內。使用OPTIONALLY要同時用TERMINLATED。
ENCLOSED 指兩個分界符內的數據。如果同時用 ENCLOSED和TERMINAED ,則它們的順序決定計算的順序。
7)定義列:
column 是表列名。列的取值可以是:
BECHUM 表示邏輯記錄數。第一個記錄為1,第2個記錄為2。
CONSTANT 表示賦予常數。
SEQUENCE 表示序列可以從任意序號開始,格式為:
SEQUENCE ( { integer | MAX |COUNT} [,increment]
POSITION 給出列在邏輯記錄中的位置。可以是絕對的,或相對前一列的值。格式為:
POSITION ( {start[end] | * [+integer] } )
Start 開始位置
* 表示前欄位之後立刻開始。
+ 從前列開始向後條的位置數。
8)定義數據類型:
可以定義14種數據類型:
CHAR
DATE
DECIMAL EXTERNAL
DECIMAL
DOUBLE
FLOAT
FLOAT EXTERNAL
GRAPHIC EXTERNAL
INTEGER
INTEGER EXTERNAL
SMALLINT
VARCHAR
VARGRAPHIC
1.字元類型數據
CHAR[ (length)] [delimiter]
length預設為 1.
2.日期類型數據
DATE [ ( length)]['date_format' [delimiter]
使用to_date函數來限制。
3.字元格式中的十進制
DECIMAL EXTERNAL [(length)] [delimiter]
用於常規格式的十進制數(不是二進制=> 一個位等於一個bit)。
4.壓縮十進制格式數據
DECIMAL (digtial [,divcision])
5.雙精度符點二進制
DOUBLE
6.普通符點二進制
FLOAT
7.字元格式符點數
FLOAT EXTERNAL [ (length) ] [delimiter]
8.雙位元組字元串數據
GRAPHIC [ (legth)]
9.雙位元組字元串數據
GRAPHIC EXTERNAL[ (legth)]
10.常規全字二進制整數
INTEGER
11.字元格式整數
INTEGER EXTERNAL
12.常規全字二進制數據
SMALLINT
13.可變長度字元串
VARCHAR
14.可變雙位元組字元串數據
VARGRAPHIC
2.2寫控制文件CTL
1. 各數據文件的文件名;
2.各數據文件格式;
3.各數據文件里各數據記錄欄位的屬性;
4.接受數據的ORACLE表列的屬性;
5.數據定義;
6.其它
數據文件的要求:
數據類型的指定
CHAR 字元型
INTEGER EXTERNAL 整型
DECIMAL EXTERNAL 浮點型
3.1數據文件的內容
可以在OS下的一個文件;或跟在控制文件下的具體數據。數據文件可以是:
1、 二進制與字元格式:LOADER可以把二進制文件讀(當成字元讀)列表中
2、 固定格式:記錄中的數據、數據類型、 數據長度固定。
3、 可變格式:每個記錄至少有一個可變長數據欄位,一個記錄可以是一個連續的字元串。
數據段的分界(如姓名、年齡)如用「,」作欄位的 分 ;用,"』作數據
括弧等
4、 LOADER可以使用多個連續欄位的物理記錄組成一個邏輯記錄,記錄文件運行情況文件:包括以下內容:
1、 運行日期:軟體版本號
2、 全部輸入,輸出文件名;對命令行的展示信息,補充信息,
3、 對每個裝入信息報告:如表名,裝入情況;對初始裝入, 加截入或更新裝
入的選擇情況,欄信息
4、 數據錯誤報告:錯誤碼;放棄記錄報告
5、 每個裝X報告:裝入行;裝入行數,可能跳過行數;可能拒絕行數;可能放
棄行數等
6、 統計概要:使用空間(包大小,長度);讀入記錄數,裝入記錄數,跳過記
錄數;拒絕記錄數,放棄記錄數;運行時間等。
Ⅲ 如何使用SQLloader導入數據
下面講講SQL Loader的基本用法。
1、在Oracle中按照導入數據的格式建立一個空表
2、編寫一個控制文件control.ctl,內容如下
LOAD DATA
INFILE 'E:\test\data.tmp'
BADFILE 'E:\test\data.bad'
DISCARDFILE 'E:\test\data.dsc'
DISCARDMAX 1000
APPEND
INTO TABLE "TB_TEST"
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
(
USER_ID,
USER_NAME,
REG_TIME DATE(20) "YYYY-MM-DD HH24:MI:SS"
)
操作分類:
a、insert,為預設方式,在數據裝載開始時要求表為空
b、append,在表中追加新記錄
c、replace,刪除舊記錄,替換成新裝載的記錄
d、truncate,同上
3、在命令行中執行以下語句:
sqlldr userid/password@database e:\test\control.ctl
Ⅳ Oracle中Data pump和SQL Loader的異同
data pump是oracle 10G的新特性,主要提高到數據的導入到出時的性能 ,到處命令expdp,導入命令 impdp
sql loader 是通過問文件向資料庫庫導入數據,要求文件中的數據有一定的格式。
二者 主要的功能不同,expdp,impdp 出要是用於數據的導入到出,邏輯備份和數據的遷移。
sql loader 是通過文本文件,向資料庫添加數據。
Ⅳ Oracle資料庫不在本地怎麼使用sqlloader
sqlloader的使用與Oracle資料庫是否在本地無關。前提是本地必須裝有Oracle客戶端。
使用Oracle版本:Oracle10g。
步驟:
1、配置本地連接遠程資料庫。在Oracle安裝目錄下,如「C:oracleproct10.2.0db_1 etworkADMIN」找到tnsnames.ora文件,增加內容(中文部分需要根據實際情況修改)並保存:
本地實例名(可自定義英文+數字組合)=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=伺服器IP或伺服器主機名)(PORT=Oracle埠號))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=資料庫服務名)
)
)
2、根據本地的要sqlloader的腳本在資料庫中建立相應的表,數據舉例如下:
Ⅵ 使用sqlloader怎樣導入txt
工作中,很多時候會遇到如下情況:需要將
excel
中的數據批量上傳到
ORACLE
表中。如果是小數據量,如幾十條至幾百條,那麼用
plsql
dev
工具,在查詢命令後加
上
for update
然後解鎖,把數據復制粘貼進去就可以了。
但如果遇到大數據量幾萬至幾十萬時,上述方法就不可行了。
如下介紹如何使用
oracle
自帶的
sqlloader
上傳數據。
2.
SQL_LOADER
上傳數據
2.1
sql_loader
說明
sql*loader
是
oracle
自帶程序。需要上傳數據的本機只要安裝了
oracle
資料庫或客
戶端就會自動集成該工具。
但是不同的版本對控制文件的寫法要求有所不同。
具體可參
見
2.3
節或者附件控制文件的內容。
2.2
編輯數據文件
要使用
sql*loader
,其數據文件必須是兩種,一種是
*.txt
的文本文件,另一種是
*.csv
的文件。
例如,
需要上傳的數據是使用
excel
編輯的,
那麼只需要將
excel
另存為
[
制
表符分割的
txt
文件
]
或者另存為
[
逗號分割的
csv
文件
]
即可。
Ⅶ sql*loader是個什麼東西
sql*loader 是一個程序, 用來把 文本文件裡面的數據, 導入到 Oracle 資料庫裡面。
下面是一個簡單的例子:
SQL*Loader
首先需要一個 控制文件test_main.ctl,內容如下:
LOAD DATA
INFILE *
INTO TABLE test_main
FIELDS TERMINATED BY ','
(ID, VALUE)
BEGINDATA
1,Test
其中,
第一行LOAD DATA意思是告訴SQL*Loader,要幹啥? 這里是載入數據。
第二行INFILE *意思是數據從哪裡來? 這里是包含在控制文件中。
第三行INTO TABLE 意思是數據要導到哪裡? 這里是要到 test_main 表。
第四行FIELDS TERMINATED BY意思是數據之間用什麼符號分隔? 這里是用 逗號 分隔。
第五行是數據要按什麼順序寫到列裡面
第六行BEGINDATA是告訴SQL*Loader,後面的都是數據了。
然後開始運行 sqlldr 程序
D:\temp>sqlldr userid=test/test123 control=test_main.ctl
SQL*Loader: Release 10.2.0.1.0 - Proction on 星期日 3月 13 14:58:22 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL*Loader-601: 對於 INSERT 選項, 表必須為空。表 TEST_MAIN 上出錯
在 SQL Plus 中,
SQL> truncate table test_main;
表被截斷。
以後,再次測試執行
D:\temp>sqlldr userid=test/test123 control=test_main.ctl
SQL*Loader: Release 10.2.0.1.0 - Proction on 星期日 3月 13 14:58:56 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
達到提交點 - 邏輯記錄計數 1
Ⅷ sqlldr是不是sql loader的縮寫
羅列了網上常見的三篇Sqlldr的介紹
一:sql loader 的特點
oracle自己帶了很多的工具可以用來進行數據的遷移、備份和恢復等工作。但是每個工具都有自己的特點。
比如說exp和imp可以對資料庫中的數據進行導出和導出的工作,是一種很好的資料庫備份和恢復的工具,因此主要用在資料庫的熱備份和恢復方面。有著速度快,使用簡單,快捷的優點;同時也有一些缺點,比如在不同版本資料庫之間的導出、導入的過程之中,總會出現這樣或者那樣的問題,這個也許是oracle公司自己產品的兼容性的問題吧。
sql loader 工具卻沒有這方面的問題,它可以把一些以文本格式存放的數據順利的導入到oracle資料庫中,是一種在不同資料庫之間進行數據遷移的非常方便而且通用的工具。缺點就速度比較慢,另外對blob等類型的數據就有點麻煩了。
二:sql loader 的幫助
C:\>sqlldr
SQL*Loader: Release 9.2.0.1.0 - Proction on 星期六 10月 9 14:48:12 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
用法: SQLLDR keyword=value [,keyword=value,...]
有效的關鍵字:
userid -- ORACLE username/password
control -- Control file name
log -- Log file name
bad -- Bad file name
data -- Data file name
discard -- Discard file name
discardmax -- Number of discards to allow (全部默認)
skip -- Number of logical records to skip (默認0)
load -- Number of logical records to load (全部默認)
errors -- Number of errors to allow (默認50)
rows -- Number of rows in conventional path bind array or between direct p
ath data saves
(默認: 常規路徑 64, 所有直接路徑)
bindsize -- Size of conventional path bind array in bytes(默認256000)
silent -- Suppress messages ring run (header,feedback,errors,discards,part
itions)
direct -- use direct path (默認FALSE)
parfile -- parameter file: name of file that contains parameter specification
s
parallel -- do parallel load (默認FALSE)
file -- File to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默
認FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unus
able(默認FALSE)
readsize -- Size of Read buffer (默認1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(
默認NOT_USED)
columnarrayrows -- Number of rows for direct path column array(默認5000)
streamsize -- Size of direct path stream buffer in bytes(默認256000)
multithreading -- use multithreading in direct path
resumable -- enable or disable resumable for current session(默認FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE(默認7200)
date_cache -- size (in entries) of date conversion cache(默認1000)
PLEASE NOTE: 命令行參數可以由位置或關鍵字指定
。前者的例子是 'sqlload
scott/tiger foo'; 後一種情況的一個示例是 'sqlldr control=foo
userid=scott/tiger'.位置指定參數的時間必須早於
但不可遲於由關鍵字指定的參數。例如,
允許 'sqlldr scott/tiger control=foo logfile=log', 但是
不允許 'sqlldr scott/tiger control=foo log', 即使
參數 'log' 的位置正確。
C:\>
三:sql loader使用例子
a)SQLLoader將 Excel 數據導出到 Oracle
1.創建SQL*Loader輸入數據所需要的文件,均保存到C:\,用記事本編輯:
控制文件:input.ctl,內容如下:
load data --1、控制文件標識
infile 'test.txt' --2、要輸入的數據文件名為test.txt
append into table test --3、向表test中追加記錄
fields terminated by X'09' --4、欄位終止於X'09',是一個製表符(TAB)
(id,username,password,sj) -----定義列對應順序
a、insert,為預設方式,在數據裝載開始時要求表為空
b、append,在表中追加新記錄
c、replace,刪除舊記錄,替換成新裝載的記錄
d、truncate,同上
在DOS窗口下使用SQL*Loader命令實現數據的輸入
C:\>sqlldr userid=system/manager control=input.ctl
默認日誌文件名為:input.log
默認壞記錄文件為:input.bad
2.還有一種方法
可以把EXCEL文件另存為CSV(逗號分隔)(*.csv),控制文件就改為用逗號分隔
LOAD DATA
INFILE 'd:\car.csv'
APPEND INTO TABLE t_car_temp
FIELDS TERMINATED BY ","
(phoneno,vip_car)
b)在控制文件中直接導入數據
1、控制文件test.ctl的內容
-- The format for executing this file with SQL Loader is:
-- SQLLDR control=<filename> Be sure to substitute your
-- version of SQL LOADER and the filename for this file.
LOAD DATA
INFILE *
BADFILE 'C:\Documents and Settings\Jackey\桌面\WMCOUNTRY.BAD'
DISCARDFILE 'C:\Documents and Settings\Jackey\桌面\WMCOUNTRY.DSC'
INSERT INTO TABLE EMCCOUNTRY
Fields terminated by ";" Optionally enclosed by '"'
(
COUNTRYID NULLIF (COUNTRYID="NULL"),
COUNTRYCODE,
COUNTRYNAME,
CONTINENTID NULLIF (CONTINENTID="NULL"),
MAPID NULLIF (MAPID="NULL"),
CREATETIME DATE "MM/DD/YYYY HH24:MI:SS" NULLIF (CREATETIME="NULL"),
LASTMODIFIEDTIME DATE "MM/DD/YYYY HH24:MI:SS" NULLIF (LASTMODIFIEDTIME="NULL")
)
BEGINDATA
1;"JP";"Japan";1;9;"09/16/2004 16:31:32";NULL
2;"CN";"China";1;10;"09/16/2004 16:31:32";NULL
3;"IN";"India";1;11;"09/16/2004 16:31:32";NULL
4;"AU";"Australia";6;12;"09/16/2004 16:31:32";NULL
5;"CA";"Canada";4;13;"09/16/2004 16:31:32";NULL
6;"US";"United States";4;14;"09/16/2004 16:31:32";NULL
7;"MX";"Mexico";4;15;"09/16/2004 16:31:32";NULL
8;"GB";"United Kingdom";3;16;"09/16/2004 16:31:32";NULL
9;"DE";"Germany";3;17;"09/16/2004 16:31:32";NULL
10;"FR";"France";3;18;"09/16/2004 16:31:32";NULL
11;"IT";"Italy";3;19;"09/16/2004 16:31:32";NULL
12;"ES";"Spain";3;20;"09/16/2004 16:31:32";NULL
13;"FI";"Finland";3;21;"09/16/2004 16:31:32";NULL
14;"SE";"Sweden";3;22;"09/16/2004 16:31:32";NULL
15;"IE";"Ireland";3;23;"09/16/2004 16:31:32";NULL
16;"NL";"Netherlands";3;24;"09/16/2004 16:31:32";NULL
17;"DK";"Denmark";3;25;"09/16/2004 16:31:32";NULL
18;"BR";"Brazil";5;85;"09/30/2004 11:25:43";NULL
19;"KR";"Korea, Republic of";1;88;"09/30/2004 11:25:43";NULL
20;"NZ";"New Zealand";6;89;"09/30/2004 11:25:43";NULL
21;"BE";"Belgium";3;79;"09/30/2004 11:25:43";NULL
22;"AT";"Austria";3;78;"09/30/2004 11:25:43";NULL
23;"NO";"Norway";3;82;"09/30/2004 11:25:43";NULL
24;"LU";"Luxembourg";3;81;"09/30/2004 11:25:43";NULL
25;"PT";"Portugal";3;83;"09/30/2004 11:25:43";NULL
26;"GR";"Greece";3;80;"09/30/2004 11:25:43";NULL
27;"IL";"Israel";1;86;"09/30/2004 11:25:43";NULL
28;"CH";"Switzerland";3;84;"09/30/2004 11:25:43";NULL
29;"A1";"Anonymous Proxy";0;0;"09/30/2004 11:25:43";NULL
30;"A2";"Satellite Provider";0;0;"09/30/2004 11:25:43";NULL
31;"AD";"Andorra";3;0;"09/30/2004 11:25:43";NULL
32;"AE";"United Arab Emirates";1;0;"09/30/2004 11:25:43";NULL
33;"AF";"Afghanistan";1;0;"09/30/2004 11:25:43";NULL
34;"AG";"Antigua and Barbuda";7;0;"09/30/2004 11:25:43";NULL
35;"AI";"Anguilla";7;0;"09/30/2004 11:25:43";NULL
36;"AL";"Albania";3;0;"09/30/2004 11:25:43";NULL
37;"AM";"Armenia";3;0;"09/30/2004 11:25:43";NULL
38;"AN";"Netherlands Antilles";3;0;"09/30/2004 11:25:43";NULL
39;"AO";"Angola";2;0;"09/30/2004 11:25:43";NULL
40;"AP";"Asia/Pacific Region";2;0;"09/30/2004 11:25:43";NULL
41;"AQ";"Antarctica";8;0;"09/30/2004 11:25:43";NULL
42;"AR";"Argentina";5;0;"09/30/2004 11:25:43";NULL
43;"AS";"American Samoa";6;0;"09/30/2004 11:25:43";NULL
44;"AW";"Aruba";5;0;"09/30/2004 11:25:43";NULL
45;"AZ";"Azerjan";1;0;"09/30/2004 11:25:43";NULL
46;"BA";"Bosnia and Herzegovina";3;0;"09/30/2004 11:25:43";NULL
47;"BB";"Barbados";5;0;"09/30/2004 11:25:43";NULL
48;"BD";"Bangladesh";1;0;"09/30/2004 11:25:43";NULL
49;"BF";"Burkina Faso";2;0;"09/30/2004 11:25:43";NULL
50;"BG";"Bulgaria";3;0;"09/30/2004 11:25:43";NULL
51;"BH";"Bahrain";1;0;"09/30/2004 11:25:43";NULL
52;"BI";"Burundi";2;0;"09/30/2004 11:25:43";NULL
53;"BJ";"Benin";2;0;"09/30/2004 11:25:43";NULL
54;"BM";"Bermuda";4;0;"09/30/2004 11:25:43";NULL
55;"BN";"Brunei Darussalam";1;0;"09/30/2004 11:25:43";NULL
56;"BO";"Bolivia";5;0;"09/30/2004 11:25:43";NULL
57;"BS";"Bahamas";7;0;"09/30/2004 11:25:43";NULL
58;"BT";"Bhutan";1;0;"09/30/2004 11:25:43";NULL
59;"BV";"Bouvet Island";5;0;"09/30/2004 11:25:43";NULL
60;"BW";"Botswana";2;0;"09/30/2004 11:25:43";NULL
61;"BY";"Belarus";3;0;"09/30/2004 11:25:43";NULL
2、執行導入命令
C:\>sqlldr userid=system/manager control=test.ctl
c)復雜格式的導入
Sqlldr
sql loader可以把一些以文本格式存放的數據順利的導入到oracle資料庫中,
是一種在不同資料庫之間進行數據遷移的非常方便而且通用的工具。
缺點就速度比較慢,另外對blob等類型的數據就有點麻煩了。
用法: SQLLDR keyword=value [,keyword=value,...]
有效的關鍵字:
userid -- ORACLE username/password
control – 控制文件
log – 記錄的日誌文件
bad – 壞數據文件
data – 數據文件
discard – 丟棄的數據文件
discardmax – 允許丟棄數據的最大值 (全部默認)
skip -- Number of logical records to skip (默認0)
load -- Number of logical records to load (全部默認)
errors – 允許的錯誤記錄數 (默認50)
rows -- Number of rows in conventional path bind array or between direct path data saves
(每次提交的記錄數,默認: 常規路徑 64, 所有直接路徑)
bindsize -- Size of conventional path bind array in bytes(默認256000)
每次提交記錄的緩沖區的大小(位元組為單位,默認256000)
silent --禁止輸出信息 (header,feedback,errors,discards,partitions)
direct – 使用直通路徑方式導入 (默認FALSE)
parfile -- parameter file: name of file that contains parameter specifications
parallel -- 並行導入 (默認FALSE)
file -- File to allocate extents from
與bindsize成對使用,其中較小者會自動調整到較大者
sqlldr先計算單條記錄長度,乘以rows,如小於bindsize,不會試圖擴張rows以填充bindsize;如超出,則以bindsize為准。
external_table
-- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(默認NOT_USED)
columnarrayrows
-- Number of rows for direct path column array(默認5000)
streamsize -- Size of direct path stream buffer in bytes(默認256000)
multithreading
-- use multithreading in direct path
resumable -- enable or disable resumable for current session(默認FALSE)
resumable_name
-- text string to help identify resumable statement
resumable_timeout
-- wait time (in seconds) for RESUMABLE(默認7200)
date_cache -- size (in entries) of date conversion cache(默認1000)
注意:有兩種方式可以指定命令行參數:通過位置或者通過關鍵字。前者的例子:'sqlldr scott/tiger foo';
後者的例子:'sqlldr control=foo userid=scott/tiger';
不能前面使用關鍵字指定後面通過位置制定的混合方式;
比如:'sqlldr scott/tiger control=foo logfile=log' 是允許的,
但'sqlldr scott/tiger control=foo log'不允許。
為清楚起見最好所有命令行參數都用關鍵字指定。
控制文件:
一個控制命令的腳本文件,通常以ctl結尾,內容如下:
LOAD DATA
INFILE 't.dat' 要導入的文件
// INFILE 'tt.date' 導入多個文件
// INFILE * 表示要導入的內容就在control文件里 下面的BEGINDATA後面就是導入的內容
INTO TABLE table_name 指定裝入的表
BADFILE 'c:\bad.txt' 可選,指定壞文件地址,預設在當前目錄下生成與原文件名一致的.bad文件
************* 以下是4種裝入表的方式
APPEND 原先的表有數據 就加在後面
INSERT 裝載空表 如果原先的表有數據 sqlloader會停止 默認值
REPLACE 原先的表有數據 原先的數據會全部刪除
TRUNCATE 指定的內容和replace的相同 會用truncate語句刪除現存數據
************* 指定分隔符
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
// TERMINATED BY WRITESPACE 以空白分割
TRAILING NULLCOLS 表的欄位沒有對應的值時允許為空
************* 下面是表的欄位
(
col_1 , col_2 ,col_filler FILLER // FILLER 關鍵字 此列的數值不會被裝載
// 如: lg,lg,not 結果 lg lg
)
如果沒聲明FIELDS TERMINATED BY ',' 時,可以用下面兩種方式實現同樣功能:
1.為每一列指定分隔符
(
col_1 [interger external] TERMINATED BY ',' ,
col_2 [date "dd-mon-yyy"] TERMINATED BY ',' ,
col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'
)
2.用位置告訴欄位裝載數據
(
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
asp.net調用bat和ctl文件實現sql*loader的功能
1 後台調用bat文件
Dim proc As System.Diagnostics.Process
proc = System.Diagnostics.Process.Start("cmd.exe", " /c " & "D:\execise\SE004.bat")
proc.WaitForExit()
或者
Shell("cmd.exe /c D:\execise\SE004.bat", AppWinStyle.NormalFocus)
或者
Dim p As New System.Diagnostics.Process
'p.StartInfo.FileName = "cmd.exe"
'p.StartInfo.Arguments = " /c " & "D:\execise\SE004.bat"
'p.StartInfo.UseShellExecute = False
'p.StartInfo.RedirectStandardInput = True
'p.StartInfo.RedirectStandardOutput = True
'p.StartInfo.RedirectStandardError = True
'p.StartInfo.CreateNoWindow = False
'p.Start()
'Dim strValue As String = p.StandardOutput.ReadToEnd()
2 然後調用ctl文件,bat文件的
SQLLDR USERID=spv3/paper@san CONTROL=d:\execise\SE004.CTL log=D:\execise\LOG\SE004.log
3, ctl文件的內容如下
LOAD DATA
INFILE 'D:\execise\SE004.CSV'
TRUNCATE
INTO TABLE TEMP_tableName
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(
id
,age
,num
,sum
)
4. 數據文件以 逗號分割
Ⅸ mysql中可以用sqlloader嗎
MySql大量輸入導入的時候都是用工具進行導入的,比如,導入EXCEL, TXT 等等等等。
你用過MYSQL的管理工具嗎?裡面有匯入精靈的。
Ⅹ oracle sqlloader 指定結束符
可以重新指定記錄的結束符號,比如將記錄結束符定義為:|加回車,infile 'test.dat' "str '|\n'"
完整控制文件為:
load data
infile 'test.dat' "str '|\n'"
into table test
fields terminated by ',' optionally enclosed by '"'
(id char(3),
ch char(5)
)
可以導入如下五條記錄
001,abc|
002,def|
003,"g
i"|
004,"jkl"|
005,mno