日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

charset参数 sqluldr2_利用sqluldr2导出数据和sqlldr导入数据的方法

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 charset参数 sqluldr2_利用sqluldr2导出数据和sqlldr导入数据的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle數據導出工具sqluldr2可以將數據以csv、txt等文件格式導出,適用于大批量數據的導出,導出速度非???#xff0c;導出后可以使用Oracle

SQL

Loader工具將數據導入到數據庫中。下面將介紹Sqluldr2和sqlldr在Windows平臺下的數據處理過程。

一、軟件下載地址

下載完sqluldr解壓后,文件夾內容如下:

sqluldr2.exe ?用于32位windows平臺;

sqluldr2_linux32_10204.bin

適用于linux32位操作系統;

sqluldr2_linux64_10204.bin

適用于linux64位操作系統;

sqluldr264.exe ?用于64位windows平臺。

文件內容如下圖所示:

二、sqluldr2 使用方法

1、首先將sqluldr2.exe復制到執行目錄下,即可開始使用

2、查看help 幫助

3、執行數據導出命令

3.1、常規導出

sqluldr2test/test@127.0.1.1/orcl query="select * from temp_001" head=yes

file=d:\tmp001.csv

說明:head=yes ?表示輸出表頭

3.2、使用sql參數

sqluldr2 test/test@127.0.1.1/orcl

sql=test_sql.sql head=yes file=d:\tmp001.csv

test_sql的內容為:

select * from temp_001

3.3、使用log參數

當集成sqluldr2在腳本中時,就希望屏蔽上不輸出這些信息,但又希望這些信息能保留,這時可以用“LOG”選項來指定日志文件名。

sqluldr2?test/test@127.0.1.1/orcl sql=test_sql.sql

head=yes file=d:\tmp001.csv log=+d:\tmp001.log

3.4、使用 table 參數

當使用 table

參數時,在目錄下會生成對應的ctl控制文件,如下語句會生成temp_001_sqlldr.ctl文件。

sqluldr2?test/test@127.0.1.1/orcl query="select * from

temp_001" table=temp_001 head=yes file=d:\tmp001.csv

生成的控制文件temp_001_sqlldr.ctl的內容如下:

4、主要參數說明

Field:分隔符,指定字段分隔符,默認為逗號;

record:分隔符,指定記錄分隔符,默認為回車換行,Windows下的換行;

quote:引號符,指定非數字字段前后的引號符;

charset:字符集,執行導出時的字符集,一般有UTF8、GBK等;

head:表頭,head=no 不導出表頭;head=yes 導出表頭。

例如現在要改變默認的字段分隔符,用“#”來分隔記錄,導出的命令如下所示:

sqluldr2 ?test/test sql=tmp.sql

field=#

在指定分隔符時,可以用字符的ASCII代碼(0xXX,大寫的XX為16進制的ASCII碼值)來指定一個字符,常用的字符的ASCII代碼如下:

回車=0x0d,換行=0x0a,TAB鍵=0x09,|=0x7c,&=0x26,雙引號=0x22,單引號=0x27

在選擇分隔符時,一定不能選擇會在字段值中出現的字符組合,如常見的單詞等,很多次導入時報錯,回過頭來找原因時,都發現是因為分隔符出現在字段值中了。

5、處理成bat文件直接運行生成結果

示例:如處理為 sqluldr2_exp_file.bat,直接雙擊運行,內容如下:

set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

set pd_mon=201910

sqluldr2.exe scott/tiger@實例 query="select * from temp_001" head=yes

field='^' charset=UTF8 file=d:\導出清單_%pd_mon%.txt

pause

三、sqlldr 使用方法

sqlldr工具可以將文本數據導入到數據庫表中,

1、查看sqlldr 的幫助文檔

2、創建測試文件

在D盤根目錄下創建測試文件tmp_insert.txt ,其內容如下:

PROD_ID,ACC_NUM

18283918,18762535162

12361527,18482762831

3、創建控制文件tmp_insert01.ctl

內容如下:

options(direct=true,errors=10000000,skip=1)

load data

characterset zhs16gbk

into table temp_001 truncate

fields terminated by ',' optionally

enclosed by '"'

trailing nullcols

(

prod_id

"trim(:prod_id)",

acc_num

"trim(:acc_num)"

)

參數說明:

characterset :字符集, 一般使用字符集

AL32UTF8,如果出現中文字符集亂碼時,改成?ZHS16GBK。

fields terminated by

'string':文本列分隔符。當為tab鍵時,改成'\t',或者 X'09';空格分隔符

whitespace,換行分隔符 '\n' 或者

X'0A';回車分隔符 '\r' 或者 X'0D';默認為'\t'。

optionally enclosed by 'char':字段包括符。當為 ' ' 時,不把字段包括在任何引號符號中;當為

"'" 時,字段包括在單引號中;當為'"'時,字段在包括雙引號中;默認不使用引用符。

fields escaped by 'char':轉義字符,默認為'\'。

trailing nullcols:表字段沒有對應的值時,允許為空。

insert:為缺省方式,在數據裝載開始時要求表為空;

append:在表中追加新記錄 ?;

replace:刪除舊記錄,替換成新裝載的記錄 ;

truncate:先清空表,再添加記錄;

skip=1 :表示插入數據時,跳過第一行(標題),從第二行開始導入;

4、執行數據導入處理

sqlldr?test/test@127.0.1.1/orcl

data=d:\tmp_insert.txt control=d:\tmp_insert01.ctl

log=d:\tmp_insert01.log bad=d:\tmp_insert01.bad

注意:在數據導入數據庫表后,查詢表數據時,會發現最后一個字段的數據中含有類似空格的字符,其實不是空格,是回車換行符,通過replace函數將其替換掉即可,如下紅色部分處理

options(direct=true,errors=10000000,skip=1)

load

data

characterset

zhs16gbk

into table

temp_001 truncate

fields

terminated by ',' optionally enclosed by '"'

trailing

nullcols

(

prod_id ?char(32)

"trim(:prod_id)",

acc_num?char(20)

"replace(:acc_num,chr(13),'')"

)

附錄:chr(9) tab空格,chr(10)

換行,chr(13) 回車,Chr(13)&chr(10) 回車換行, chr(32) 空格符 , chr(34) 雙引號 ,

chr(39) 單引號

5、sqlldr中支持定義的數據類型

可以定義14種數據類型:

CHAR

DATE

DECIMAL EXTERNAL

DECIMAL

DOUBLE

FLOAT

FLOAT EXTERNAL

GRAPHIC EXTERNAL

INTEGER

INTEGER EXTERNAL

SMALLINT

VARCHAR

VARGRAPHIC

a、字符類型數據

CHAR[ (length)] [delimiter]

length缺省為 1,ctl文件中char(20) 一般對應數據庫表中 varchar2(20) 。

b、日期類型數據

DATE [ ( length)]['date_format' [delimiter]

使用to_date函數來限制

ctl文件中 date "yyyy-mm-dd hh24:mi:ss" 對應數據庫表中 date

c、字符格式中的十進制

DECIMAL EXTERNAL [(length)] [delimiter]

用于常規格式的十進制數(不是二進制=> 一個位等于一個bit)

ctl文件中 decimal external 對應 數據庫表中 number

d、壓縮十進制格式數據

DECIMAL (digtial [,precision])

ctl文件中 decimal對應 數據庫表中 number

e、雙精度符點二進制

DOUBLE

f、普通符點二進制

FLOAT

g、字符格式符點數

FLOAT EXTERNAL [ (length) ] [delimiter]

h、雙字節字符串數據

GRAPHIC [ (legth)]

i、雙字節字符串數據

GRAPHIC EXTERNAL[ (legth)]

j、常規全字二進制整數

INTEGER

ctl文件中的integer 對應數據庫表中 integer

k、字符格式整數

INTEGER EXTERNAL

l、常規全字二進制數據

SMALLINT

m、可變長度字符串

VARCHAR

ctl文件中varchar 對應 數據庫表中 varchar2

n、可變雙字節字符串數據

VARGRAPHIC

6、常見錯誤示例

6.1、SQL*Loader-601: For INSERT option, table

must be empty.

這時需要,更改為追加(append)方式加載數據。

創建控制文件tmp_insert01.ctl,內容如下:

OPTIONS(DIRECT=TRUE,ERRORS=10000000,skip=1)

LOAD DATA

--INFILE 'd:\tmp_insert.txt'

CHARACTERSET AL32UTF8

APPEND INTO TABLE TEMP_001

FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

TRAILING NULLCOLS

(

PROD_ID?"TRIM(:PROD_ID)",

ACC_NUM?"TRIM(:ACC_NUM)"

)

6.2、field in data file

exceeds maximum length

原因是控制文件(CTL)中默認為是char類型且沒有定義長度,當該列數據長度超過255(char類型長度)時會提示該錯誤。

解決辦法:

根據數據庫表中字段長度1000,將CTL文件中的 "col_name char" 調整為"col_name char(1000)"

即可,注意是 char 類型,而不是varchar類型。

本文主要參考:http://wenku.baidu.com/link?url=iNKiOMxvdvVTmLb-6sNlRLLcxF6XON-J4gbYoAzxcY1eFpqVAmhpBK-crQCpEDcfo4s6fH2CtERiqIbjErHQp03rhow4EURBnJLNOcbY6VK

總結

以上是生活随笔為你收集整理的charset参数 sqluldr2_利用sqluldr2导出数据和sqlldr导入数据的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。