程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 將文件導入到數據庫中的方法小結

將文件導入到數據庫中的方法小結

編輯:Oracle數據庫基礎

大型的數據庫開發中常常遇到數據源是平面文件的情況,對於這樣的數據源,無法使用數據庫對其數據進行有效的管理   本文介紹幾種常見的數據導入的方法,希望能夠給讀者以啟迪。另外,本文所涉及到的數據庫均為Oracle數據庫,其實對於其他數據庫而言,方法類似。

一、 Sql*:Loader

該方法是Oracle數據庫下數據導入的最重要的方法之一,該工具由Oracle客戶端提供,其基本工作原理是:首先要針對數據源文件制作一個控制文件,控制文件是用來解釋如何對源文件進行解析,其中需要包含源文件的數據格式、目標數據庫的字段等信息,一個典型的控制文件為如下形式:

  

  LOAD DATA

  INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'

  TRUNCATE

  INTO TABLE fj_ipa_agentdetail

  fIElds terminated ","

  trailing nullcols

  ( AGENT_NO char,

  AGENT_NAME char,

  AGENT_ADDRESS char,

  AGENT_LINKNUM char,

  AGENT_LINKMAN char

  )

  

其中,INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'指明所要導入的源文件,其實源文件也可以直接通過命令行來輸入獲得,fj_ipa_agentdetail為目標表的名字,fIElds terminated ","是指源文件的各個字段是以逗號分隔,trailing nullcols表示遇到空字段依然寫入到數據庫表中,最後這5個字段是目標數據庫表的字段結構。通過上面這個典型的控制文件的格式分析可知,控制文件需要與源文件的格式信息一致,否則導入數據會出現異常。

除了控制以外,sql*loader的還需要數據文件,即源文件。根據格式的不同,源文件可以分為固定字段長度和有分隔符這兩大類,這裡將分別說明這兩種情況:

固定字段長度的文本文件

就是每個字段擁有固定的字段長度,比如:

  

  602530005922 1012

  602538023138 1012

  602536920355 1012

  602531777166 1012

  602533626494 1012

  602535700601 1012

  

有分隔符的文本文件

就是每個字段都有相同的分隔符分隔,比如:

1001,上海長途電信綜合開發公司,南京東路34號140室

1002,上海桦奇通訊科技有限公司,武寧路19號1902室

1003,上海邦正科技發展有限公司,南京東路61號903室

對於上述兩種文件格式sql*loader均可以做處理,下面就前面那個固定長度的文本來舉例說明:

由於該文本只有兩個字段,一個為設備號,一個是區局編號,兩者的長度分別為20和5,那麼可以編制控制文件如下:

  

  LOAD DATA

  INFILE '/ora9i/fengjIE/agent/data/ipaagent200410.txt'

  TRUNCATE

  INTO TABLE fj_ipa_agent

  ( DEVNO POSITION(1:20) CHAR,

  BRANCH_NO POSITION(21:25) CHAR

  )

  

其中,'/ora9i/fengjIE/agent/data/ipaagent200410.txt'為該文件的完全路徑,POSITION(M:N)表示該字段是從位置M到位置N。

對於有分隔符的數據文件,前面已經有一個例子,這裡就不再贅述了。總之,使用Sql*Loader能夠輕松將數據文件導入到數據庫中,這種方法也是最常用的方法。

大型的數據庫開發中常常遇到數據源是平面文件的情況,對於這樣的數據源,無法使用數據庫對其數據進行有效的管理   本文介紹幾種常見的數據導入的方法,希望能夠給讀者以啟迪。另外,本文所涉及到的數據庫均為Oracle數據庫,其實對於其他數據庫而言,方法類似。

一、 Sql*:Loader

該方法是Oracle數據庫下數據導入的最重要的方法之一,該工具由Oracle客戶端提供,其基本工作原理是:首先要針對數據源文件制作一個控制文件,控制文件是用來解釋如何對源文件進行解析,其中需要包含源文件的數據格式、目標數據庫的字段等信息,一個典型的控制文件為如下形式:

  

  LOAD DATA

  INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'

  TRUNCATE

  INTO TABLE fj_ipa_agentdetail

  fIElds terminated ","

  trailing nullcols

  ( AGENT_NO char,

  AGENT_NAME char,

  AGENT_ADDRESS char,

  AGENT_LINKNUM char,

  AGENT_LINKMAN char

  )

  

其中,INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'指明所要導入的源文件,其實源文件也可以直接通過命令行來輸入獲得,fj_ipa_agentdetail為目標表的名字,fIElds terminated ","是指源文件的各個字段是以逗號分隔,trailing nullcols表示遇到空字段依然寫入到數據庫表中,最後這5個字段是目標數據庫表的字段結構。通過上面這個典型的控制文件的格式分析可知,控制文件需要與源文件的格式信息一致,否則導入數據會出現異常。

除了控制以外,sql*loader的還需要數據文件,即源文件。根據格式的不同,源文件可以分為固定字段長度和有分隔符這兩大類,這裡將分別說明這兩種情況:

固定字段長度的文本文件

就是每個字段擁有固定的字段長度,比如:

  

  602530005922 1012

  602538023138 1012

  602536920355 1012

  602531777166 1012

  602533626494 1012

  602535700601 1012

  

有分隔符的文本文件

就是每個字段都有相同的分隔符分隔,比如:

1001,上海長途電信綜合開發公司,南京東路34號140室

1002,上海桦奇通訊科技有限公司,武寧路19號1902室

1003,上海邦正科技發展有限公司,南京東路61號903室

對於上述兩種文件格式sql*loader均可以做處理,下面就前面那個固定長度的文本來舉例說明:

由於該文本只有兩個字段,一個為設備號,一個是區局編號,兩者的長度分別為20和5,那麼可以編制控制文件如下:

  

  LOAD DATA

  INFILE '/ora9i/fengjIE/agent/data/ipaagent200410.txt'

  TRUNCATE

  INTO TABLE fj_ipa_agent

  ( DEVNO POSITION(1:20) CHAR,

  BRANCH_NO POSITION(21:25) CHAR

  )

   其中,'/ora9i/fengjIE/agent/data/ipaagent200410.txt'為該文件的完全路徑,POSITION(M:N)表示該字段是從位置M到位置N。

對於有分隔符的數據文件,前面已經有一個例子,這裡就不再贅述了。總之,使用Sql*Loader能夠輕松將數據文件導入到數據庫中,這種方法也是最常用的方法。

二、 使用專業的數據抽取工具

目前在數據倉庫領域中,數據抽取與裝載(ETL)是一重要的技術,這一技術對於一些大的數據文件或者文件數量較多尤其適合。這裡簡單介紹目前一款主流的數據抽取工具――Informatica。

該工具主要采用圖形界面進行編程,其主要工作流程是:首先將源數據文件的結構(格式)導入為Informatica裡,然後根據業務規則對該結構進行一定的轉換(transformation),最終導入到目標表中。

以上過程僅僅只是做了一個從源到目標的映射,數據的實際抽取與裝載需要在工作流(workflow)裡進行。

使用專業的數據抽取工具,可以結合業務邏輯對多個源數據進行join,union,insect等操作,適合於大型數據庫和數據倉庫。

三、 使用Access工具導入

可以直接在Access裡選擇‘打開‘文本文件,這樣按照向導來導入一個文本文件到Access數據庫中,然後使用編程的方法將其導入到最終的目標數據庫中。

這種方法雖然煩瑣,但是其對系統的軟件配置要求相對較低,所以也是有一定的使用范圍。

四、 小結

總之,平面文件轉化為數據庫格式有利於數據的處理,顯然,數據庫強大的數據處理能力比直接進行文件I/O效率高出很多,希望本文能夠對該領域做一個拋磚引玉的作用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved