測試TOM==SQLLDR載入固定格式資料
如果平面檔案中的資料格式固定,如NAME1-5位元組,CITY6-10位元組。這種格式的資料最適合用SQLLDR來處理,載入的速度也最快,要實現這一功能只需要用到SQLLDR的POSITION選項,這個選項是用來指定列的資料位置範圍的。
關於POSITON選項的另一說明:在用這個選項的時候可以使用,相對便宜量和絕對便宜量,使用絕對全稱量得去計算資料的開始結束位置,如果很多列的話,這會讓人覺得很煩!
測試開始
會話1:清空測試表,重建控制檔案
SQL> select * from dept_load;
DEPTNO DNAME LOC
---------- -------------- -------------
10 sales virginia
SQL> truncate table dept_load;
Table truncated.
SQL>
[oracle@oraclelinux ~]$ ls -ltr dept*
-rw-r--r-- 1 oracle oinstall 123 May 14 11:06 dept_load4.ctl
-rw-r--r-- 1 oracle oinstall 1548 May 14 11:07 dept_load4.log
[oracle@oraclelinux ~]$ cp dept_load4.ctl dept_load5.ctl
[oracle@oraclelinux ~]$ rm -f dept_load4*
[oracle@oraclelinux ~]$ ls -ltr dept*
-rw-r--r-- 1 oracle oinstall 123 May 14 11:17 dept_load5.ctl
[oracle@oraclelinux ~]$ vi dept_load5.ctl
1 load data
2 infile *
3 into table dept_load
4 replace
5 (deptno position(1:2),
6 dname position(3:16),
7 loc position(17:29)
8 )
9 begindata
10 10accounting virginia,usa
~
~
會話1:載入資料
[oracle@oraclelinux ~]$ sqlldr userid=scott/scott control=dept_load5.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Mon May 14 11:22:30 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 1
[oracle@oraclelinux ~]$ !
bash: syntax error near unexpected token `newline'
[oracle@oraclelinux ~]$ exit
exit
SQL> select * from dept_load;
DEPTNO DNAME LOC
---------- -------------- -------------
10 accounting vir ginia,usa
SQL>
測試結束
這個控制檔案中沒有使用FIELDS TERMINATED BY,使用POSITION來指定列從那開始,從那裡結束
關於POSITON選項的另一用法,利用它在記錄中來回反覆,不過好像沒有什麼實際意義。
測試開始:
會話1:重建控制檔案
[oracle@oraclelinux ~]$ ls -ltr dept*
-rw-r--r-- 1 oracle oinstall 151 May 14 11:20 dept_load5.ctl
-rw-r--r-- 1 oracle oinstall 1548 May 14 11:22 dept_load5.log
[oracle@oraclelinux ~]$ cp dept_load6.ctl
cp: missing destination file
Try `cp --help' for more information.
[oracle@oraclelinux ~]$ cp dept_load5.ctl dept_load6.ctl
[oracle@oraclelinux ~]$ rm -f dept_load5*
[oracle@oraclelinux ~]$ ls -ltr dept_*
-rw-r--r-- 1 oracle oinstall 151 May 14 11:29 dept_load6.ctl
[oracle@oraclelinux ~]$ vi dept_load6.ctl
1 load data
2 infile *
3 into table dept_load
4 replace
5 (deptno position(1:2),
6 dname position(3:16),
7 loc position(17:29),
8 entire_line position(1:29)
9 )
10 begindata
11 10accounting virginia,usa
會話1:載入資料
oracle@oraclelinux ~]$ sqlldr userid=scott/scott control=dept_load6.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Mon May 14 11:33:03 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 1
[oracle@oraclelinux ~]$ exit
exit
SQL> select * from dept_load;
DEPTNO DNAME LOC ENTIRE_LINE
---------- -------------- ------------- -----------------------------
10 accounting vir ginia,usa 10accounting virginia,usa
SQL>
這裡把所有記錄放在了一個欄位裡邊
測試結束
關於POSITON選項的另一說明:在用這個選項的時候可以使用,相對便宜量和絕對便宜量,使用絕對全稱量得去計算資料的開始結束位置,如果很多列的話,這會讓人覺得很煩!
測試相對偏移量開始
會話1:清空測試表,重新控制檔案
[oracle@oraclelinux ~]$ vi dept_load7.ctl
1 load data
2 infile *
3 into table dept_load
4 replace
5 (deptno position(1:2),
6 dname position(*:16),
7 loc position(*:29),
8 entire_line position(1:29)
9 )
10 begindata
11 10accounting virginia,usa
~
會話1:載入資料
[oracle@oraclelinux ~]$ sqlldr userid=scott/scott control=dept_load7.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Mon May 14 11:42:13 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 1
[oracle@oraclelinux ~]$
[oracle@oraclelinux ~]$ exit
exit
SQL> select * from dept_load;
DEPTNO DNAME LOC ENTIRE_LINE
---------- -------------- ------------- -----------------------------
10 accounting vir ginia,usa 10accounting virginia,usa
SQL>
可以看到效果和使用絕對偏移量是一樣的,這裡使用*號來自動計算上一個列結束的位置,另外使用*號時也可以把它和偏移量相加,像這樣(*+2:16),這就表示從上一欄位結束後在加上兩個位置做為新欄位的起始位置,新欄位結束位置16.
測試偏移量結束
POSITION選項另一說明:POSITION的結束位置必須是資料結束的絕對位置,有些時候可能指定每個欄位的長度更省事,特別是欄位是連續的情況下。採用這種方式只需要告訴SQLLDR:記錄從第1個位元組開始,然後指定每個列的長度就可以了,這樣不需要計算開始和結束偏移量。
測試指定列長度開始
會話1:清空測試資料,重建控制檔案,載入資料
SQL> truncate table dept_load;
Table truncated.
SQL> 1
1* truncate table dept_load
SQL> !
[oracle@oraclelinux ~]$ ls -ltr dept*
-rw-r--r-- 1 oracle oinstall 178 May 14 11:41 dept_load7.ctl
-rw-r--r-- 1 oracle oinstall 1628 May 14 11:42 dept_load7.log
[oracle@oraclelinux ~]$ rm -f dept_load7*
[oracle@oraclelinux ~]$ vi dept_load8.ctl
1 load data
2 infile *
3 into table dept
4 replace
5 (deptno position(1) char(2),
6 dname position(*) char(14),
7 loc position(*) char(13),
8 entire_line position(1) char(29)
9 )
10 begindata
11 10accounting virginia,usa
[oracle@oraclelinux ~]$ sqlldr userid=scott/scott control=dept_load8.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Mon May 14 12:16:36 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 2
[oracle@oraclelinux ~]$ exit
exit
SQL> select * from dept_load;
DEPTNO DNAME LOC ENTIRE_LINE
---------- -------------- ------------- -----------------------------
10 accounting vir ginia,usa 10accounting virginia,usa
SQL>
測試結束
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15720542/viewspace-723496/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 測試TOM=SQLLDR載入日期資料SQL
- 測試TOM=SQLLDR使用函式載入資料SQL函式
- 測試TOM=SQLLDR載入內嵌換行符資料SQL
- 【sqlldr載入資料】SQL
- sqlldr批量匯入匯出資料測試SQL
- sqlldr批次匯入匯出資料測試SQL
- 測試TOM=SQLLDR生成外部表SQL
- 測試TOM=用PLSQL載入LOB型別資料SQL型別
- 測試TOM=SQLLDR使用CASE語句SQL
- 測試TOM=SQLLDR函式使用1SQL函式
- 測試TOM=SQLLOADER載入製表符號資料SQL符號
- SQLLDR直接載入幾個引數的測試SQL
- sqlldr 載入資料 OGG 是否會同步SQL
- 資料匯入SQLLDRSQL
- 測試oracle sqlldrOracleSQL
- 利用SQLLDR載入包含LOB物件的資料(三)SQL物件
- 利用SQLLDR載入包含LOB物件的資料(二)SQL物件
- 利用SQLLDR載入包含LOB物件的資料(一)SQL物件
- sqlldr 匯入資料範例SQL
- Oracle sqlldr工具功能測試OracleSQL
- sqlldr效能調優測試SQL
- 採用sqlldr定時將文字檔案載入進入資料庫SQL資料庫
- 通過SQLLDR匯入LOB資料SQL
- 用sqlloader(sqlldr)裝載LOB資料SQL
- SQLLDR直接載入能否分批提交?SQL
- ETL測試或資料倉儲測試入門
- oracle資料庫使用sqlldr命令匯入txt資料Oracle資料庫SQL
- [轉載]使用uiautomator做UI測試UI
- java的geojson格式測試資料模擬JavaJSON
- 文字檔案的資料裝載工具sqlldrSQL
- 【實驗】【SQL*Loader】使用SQLLDR將資料載入到CLOB欄位SQL
- Sqlserver資料寫入表測試SQLServer
- SparkSQL讀取Parquet格式的資料載入DatFrameSparkSQL
- 使用oracle sqlldr匯入文字資料的例子OracleSQL
- sqlldr載入效能問題的排查SQL
- sqlldr載入會產生redo嗎?SQL
- ORACLE 的載入工具SQLLDR應用OracleSQL
- 使用sqlldr匯入日期格式欄位的問題SQL