利用UTL FILE包實現檔案I O操作

2021-05-25 06:55:07 字數 2555 閱讀 8093

檔案i/o對於資料庫的開發來說顯得很重要,比如如果資料庫中的一部分資料來自於磁碟檔案,那麼就需要使用i/o介面把資料匯入到資料庫中來。在pl/sql中沒有直接的i/o介面,一般在除錯程式時可以使用oracle自帶的dbms_output包的put_line函式(即向螢幕進行i/o操作)即可,但是對於磁碟檔案的i/o操作它就無能為力了。其實oracle同樣也提供了可以進行檔案i/o的實用包-----utl_file包,利用這個實用包提供的函式來實現對磁碟的i/o操作。

1. 準備工作

由於oracle資料庫對包建立的目錄有乙個安全管理的問題,所以並不是所有的檔案目錄能夠被utl_file包所訪問,要更新這種目錄設定,就得到init.ora裡將utl_file_dir域設定為*,這樣utl_file包就可以對所有的目錄檔案進行訪問了。

2. 檔案i/o的實施

utl_file包提供了很多實用的函式來進行i/o操作,主要有以下幾個函式:

fopen

開啟指定的目錄路徑的檔案。

get_line

獲取指定檔案的一行的文字。

put_line

向指定的檔案寫入一行文字。

fclose

關閉指定的檔案。

下面利用這些函式,實現從檔案取資料,然後將資料寫入到相應的資料庫中。

create or replace procedure loadfiledata(p_path varchar2,p_filename varchar2) as 

v_filehandle utl_file.file_type; --定義乙個檔案控制代碼

v_text varchar2(100); --存放文字

v_name test_loadfile.name%type;

v_addr_jd test_loadfile.addr_jd%type;

v_region test_loadfile.region%type;

v_firstlocation number;

v_secondlocation number;

v_totalinserted number;

begin

if (p_path is null or p_filename is null) then

goto to_end;

end if;

v_totalinserted:=0;

/*open specified file*/

v_filehandle:=utl_file.fopen(p_path,p_filename,'r'); 

loop

begin

utl_file.get_line(v_filehandle,v_text); 

exception

when no_data_found then

exit;

end ; 

v_firstlocation:=instr(v_text,',',1,1);

v_secondlocation:=instr(v_text,',',1,2);

v_name:=substr(v_text,1,v_firstlocation-1);

v_addr_jd:=substr(v_text,v_firstlocation+1,v_secondlocation-v_firstlocation-1);

v_region:=substr(v_text,v_secondlocation+1);

/*插入資料庫操作*/

insert into test_loadfile

values (v_name,v_addr_jd,v_region);

commit; 

end loop; 

<>

null;

end loadfiledata;/

3. 測試環境

首先要建立乙個目標表test_loadfile,它用來儲存檔案中的資料:

create table test_loadfile ( 

name varchar2 (100) not null, 

addr_jd varchar2 (20), 

region varchar2 (6) ) ;

然後就可以在sqlplus裡輸入如下的**並執行即可。

declare

v_path varchar2(200);

v_filename varchar2(200);

begin

v_path:='f: ';

v_filename:='位址資訊.txt';

loadfiledata(v_path,v_filename);

end;/

需要注意的是,這裡我的除錯路徑為「f:」位址,如果讀者自己建立實驗環境,應該設定為的「位址資訊」檔案的路徑

整個除錯環境是:

伺服器端:unix作業系統+oracle9i資料庫伺服器,

客戶端: sqlplus,作業系統為win2000。

4. 小結

oracle本身提供了大量使用的包,如utl_http包,dbms_output包等,這些包分別封裝了不同的功能,它們使得進行大量的應用程式開發的可能,從而拓展了oracle的功能。

oracle利用utl file包來讀寫檔案

oracle利用使用utl file包 create or replace procedure loadfiledata p path varchar2,p filename varchar2 is v filehandle utl file.file type 定義乙個檔案控制代碼 v text ...

utl file包進行OS檔案操作

利用 oracle utl file 1 建立檔案目錄 首先在資料庫伺服器上建立相應的檔案目錄。1 1方法 在初始化檔案配置檔案 init.ora 的配置中將 utl file dir e temp 指定路徑 1.2 方法 建立路徑物件 create directory test dir as e ...

oracle中utl file包讀寫檔案操作學習

oracle中utl file包讀寫檔案操作學習 在oracle中utl file包提供了一些操作文字檔案的函式和過程,學習了一下他的基本操作 www.2cto.com 1.建立directory,並給使用者授權 建立directory create or replace directory tes...