您好,登錄后才能下訂單哦!
最近在處理一批文本數(shù)據(jù),規(guī)定按照接口說明導(dǎo)入到ORACLE數(shù)據(jù)庫中,經(jīng)過最近的研究,解決了一些問題,覺得我必要總結(jié)一下:
常規(guī)資料:
----------------------------------------------------
Dos 環(huán)境下使用SQl*Loader命令 加載
使用其它數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)移工具
Oracle 企業(yè)管理器中的數(shù)據(jù)加載功能
具體的技術(shù)實(shí)現(xiàn)
一、Dos 環(huán)境下加載
1、首先,服務(wù)器端的偵聽服務(wù)必須已經(jīng)開啟。
測試方法:Dos 下輸入
C:/>sqlplus username/password@serviceName
2、然后使用 Oracle 的 sqlldr 命令進(jìn)行數(shù)據(jù)的導(dǎo)入
前期條件
1) Oracle 數(shù)據(jù)庫端必須已經(jīng)建好了需要導(dǎo)入的數(shù)據(jù)表的結(jié)構(gòu)
2) 一個(gè)數(shù)據(jù)源文件 下面例子中為制表符分隔的文本文件 model.txt ,為Excel 表中導(dǎo)出的
3) 手工編輯一個(gè)XXX.CTL 的控制文件
4) 命令行加載數(shù)據(jù)
如下實(shí)例:
以下文件缺省放到C:/ 下,如果不是,就需要指明全路徑
1. 命令控制文件 input.ctl 內(nèi)容
命令
說明
load data
1、控制文件標(biāo)識
infile 'model.txt'
2、要輸入的數(shù)據(jù)文件名為test.txt
append into table system.塔位屬性表
3、向表test中追加記錄
fields terminated by X'09'
4、指定分隔符,字段終止于X'09',是一個(gè)制表符(TAB)
(編號,名稱,大小)
5、定義列對應(yīng)表中順序
控制文件中指定插入數(shù)據(jù)的方式關(guān)鍵字
insert,為缺省方式,在數(shù)據(jù)裝載開始時(shí)要求表為空
append,在表中追加新記錄
replace,刪除舊記錄,替換成新裝載的記錄
truncate,同上
在 Dos 窗口下使用 SQl*Loader 命令實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入
C:/>sqlldr userid=system/manager@ serviceName control=input.ctl
默認(rèn)日志文件名為:input.log
默認(rèn)壞記錄文件為:input.bad
二、使用其它數(shù)據(jù)庫轉(zhuǎn)移工具
以下以SQL Server 導(dǎo)入導(dǎo)出向?qū)槔?
1、在數(shù)據(jù)的導(dǎo)入導(dǎo)出向?qū)е性O(shè)置數(shù)據(jù)源服務(wù)器,實(shí)例中選擇數(shù)據(jù)源選擇SQL Server
2、然后指定要導(dǎo)入的Oracle 數(shù)據(jù)源
3、需要配置Oracle 的屬性信息
需要注意的是,登錄數(shù)據(jù)庫的用戶信息即為數(shù)據(jù)導(dǎo)入之后的方案名,即導(dǎo)入之后的SQL Server 中的表在Oracle 中標(biāo)志名為 username.表名
以下按照提示即可,可以完全導(dǎo)入SQl Server 中的數(shù)據(jù)表和視圖,也可以使用查詢語句返回你要選擇的列或者行。
三、Oracle 企業(yè)管理器中的數(shù)據(jù)加載功能
登錄Oracle 的控制臺界面,針對單獨(dú)的數(shù)據(jù)表可以使用數(shù)據(jù)加載工具
中間需要指定控制文件等,同Dos 加載一致,不再重復(fù)
----------------------------------------------------
向Oracle中導(dǎo)入文本數(shù)據(jù)時(shí)使用的控制文件格式
無論是使用上一篇中的哪種方式都需要有一個(gè)控制文件,下面是控制文件(ctl文件)書寫的基本格式:
命令
說明
load data
1、控制文件標(biāo)識
infile 'testl.txt'
2、要輸入的數(shù)據(jù)文件名為test.txt,此時(shí)是要導(dǎo)入的數(shù)據(jù)文件同控制文件在同一路徑下,如果不在同一路徑下則需要寫完整路徑名
append into table 表名(可以是全名也可以是同義詞)
3、向表test中追加記錄
fields terminated by X'09'
4、指定分隔符,字段終止于X'09' (很重要),是一個(gè)制表符(TAB),如果用逗號分割就將X'09'替換為','
(編號,名稱,大小)
5、定義列對應(yīng)表中順序
控制文件中指定插入數(shù)據(jù)的方式關(guān)鍵字
insert,為缺省方式,在數(shù)據(jù)裝載開始時(shí)要求表為空
append,在表中追加新記錄
replace,刪除舊記錄,替換成新裝載的記錄
truncate,同上
控制文件的示例:
load data
infile 'test.txt'
append into table test.test
fields terminated by X'09'
(test,test1,test2)
對有時(shí)間類型的數(shù)據(jù)導(dǎo)入的示例控制文件:
load data
infile 'h:/TB_FACT_PHS_TICKET_DAY.txt'
Append into TABLE TB_FACT_PHS_TICKET_DAY
fields terminated by X'09'
(Time_Id
,Region_Id
,Cust_Type_Id
,Prod_Type_Id
,Acct_Item_Type_Id
,Acct_Item_Type_Cd
,Exchange97_Cd
,Latn_Cd
,Call_Duration
,Access_In_Duration
,Income
,In_Date Date "YYYY-MM-DD"
)
文件導(dǎo)入命令 C:/>sqlldr userid=test/test@test control=test.ctl(此時(shí)控制文件test.ctl存在C:/路徑下)
在命令控制符下進(jìn)入Oracle C:/>sqlplus username/password@serviceName
oracle導(dǎo)入txt數(shù)據(jù)文件2008年07月30日 星期三 17:21把txt文件格式的數(shù)據(jù)文件導(dǎo)入oracle的方法是利用sqlloader工具。
第一步:把文本格式的數(shù)據(jù)文件放入C盤。如,test.txt
第二步:建立控制文件append.ctl。(名字可以隨便取,放C盤下)
append.ctl的內(nèi)容如下:
load data --1、控制文件標(biāo)識
infile 'test.txt' --2、要輸入的數(shù)據(jù)文件名為test.txt
append into table CTXSYS.test --3、向CTXSYS表空間中的表test中追加記錄
fields terminated by X'09' --4、字段終止于X'09',是一個(gè)制表符
(id,username,password,sj) -----定義列對應(yīng)順序
其中append為數(shù)據(jù)裝載方式,還有其他選項(xiàng):
a、insert,為缺省方式,在數(shù)據(jù)裝載開始時(shí)要求表為空
b、append,在表中追加新記錄
c、replace,刪除舊記錄,替換成新裝載的記錄
d、truncate,同上
第三步:在命令提示符下輸入命令。
C:/>sqlldr userid=username/password
control=c:/append.ctl 數(shù)據(jù)庫中用名的用戶名和密碼
或者 C:/>sqlldr userid=system/manager@ serviceName control=input.ctl
----------------------------------------------------
一些經(jīng)常出現(xiàn)的問題:
1。關(guān)于日期格式的問題:
ctl基本寫法諸如:
load data
infile 'C:/TP_LOANCONTRACTSUM.txt'
insert into table TP_LOANCONTRACTSUM
fields terminated by '|!'
(
column01,
column02,
column03,
column04 "to_date(:column04,'''yyyy-mm-dd hh34:mi:ss''')",
column05 "to_date(:column05,'''yyyy-mm-dd hh34:mi:ss''')",
column06,
column07,
column08,
column09,
column10,
column11,
column12 "to_date(:column12,'''yyyy-mm-dd hh34:mi:ss''')",
column13
)
2。關(guān)于長字符串問題,CTL默認(rèn)情況下是256位(或者256位左右),所以長字符串時(shí)會在log里報(bào)錯(cuò),提示所輸入的值超過最大長度,解決辦法,在ctl文件里再指定大小,注意個(gè)情況,不能寫VARCHAR只能寫CHAR,否則報(bào)錯(cuò),諸如:
load data
infile 'C:/TP_PLEDGECONTRACTINFO.txt'
insert into table TP_PLEDGECONTRACTINFO
fields terminated by '|!'
(
column01,
column02,
column03,
column04,
column05,
column06,
column07 "to_date(:column07,'''yyyy-mm-dd hh34:mi:ss''')",
column08,
column09,
column10 "to_date(:column10,'''yyyy-mm-dd hh34:mi:ss''')",
column11,
column12,
column13,
column14,
column15 "to_date(:column15,'''yyyy-mm-dd hh34:mi:ss''')",
column16,
column17,
column18 "to_date(:column18,'''yyyy-mm-dd hh34:mi:ss''')",
column19,
column20,
column21,
column22,
column23,
column24,
column25 "to_date(:column25,'''yyyy-mm-dd hh34:mi:ss''')",
column26 CHAR(500),
column27,
column28
)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。