檔案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...