溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

sqlldr

發(fā)布時(shí)間:2020-08-07 02:52:13 來源:ITPUB博客 閱讀:179 作者:595117995 欄目:關(guān)系型數(shù)據(jù)庫

最近在處理一批文本數(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
)

向AI問一下細(xì)節(jié)

免責(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)容。

AI