Oracle數(shù)據(jù)庫記錄輸出到文本文件的方法
中國科技信息研究所
涂悅紅
---- 在某些情況下,比如說為了與其他數(shù)據(jù)庫進行數(shù)據(jù)交換,我們需要把ORACLE數(shù)據(jù)庫里的數(shù)據(jù)輸出來,保存到一個中間文件,然后再作處理。那么如何輸出ORACLE數(shù)據(jù)庫里的數(shù)據(jù)呢?
---- 假設這些數(shù)據(jù)是文本類型的數(shù)據(jù)(字符、數(shù)字、日期),我們至少有兩種辦法輸出,一種是利用制表功能,把所有數(shù)據(jù)以表格形式輸出,并把表格保存到一個文本文件。另一種辦法更簡單,就是利用UTL_FILE包,直接把數(shù)據(jù)輸入到文本文件。
---- 在使用UTL_FILE包前需要在ORACLE數(shù)據(jù)庫的初始化文件(initsid.ora)定義UTL_FILE的可寫目錄,例如
UTL_FILE=/eXPort/home/oracle/output
---- 另外,還要注重的是輸出記錄中字段最大大小是1023字節(jié),假如有字段超過這個限制,就需要把它截斷成幾部分,就如下面的例子一樣。
---- 這里給出一個實例,朋友們可以先照搬,然后根據(jù)自己數(shù)據(jù)庫的實際情況,修改后使用。
DECLARE
OutputFile UTL_FILE.FILE_TYPE;
vart_title perd11.ART_TITLE%TYPE;
vart_author perd11.ART_AUTHOR%TYPE;
vart_keyWord perd11.ART_KEYWORD%TYPE;
vart_abstract perd11.ART_ABSTRACT%TYPE;
vart_abs1 perd11.ART_ABSTRACT%TYPE;
vart_abs2 perd11.ART_ABSTRACT%TYPE;
vart_authorinstitute perd11.ART_AUTHORINSTITUTE%TYPE;
vperd_volume perd11.PERD_VOLUME%TYPE;
vperd_issue perd11.PERD_ISSUE%TYPE;
vperd_date perd11.PERD_DATE%TYPE;
vpub_name perd11.PUB_NAME%TYPE;
vpub_issn perd11.PUB_ISSN%TYPE;
vclass_name perd11.CLASS_NAME%TYPE;
CURSOR cperd11 IS
select * from perd11;
BEGIN
OutputFile := UTL_FILE.FOPEN
('/export/home/oracle/output','perd11.out','a');
open cperd11;
LOOP
fetch cperd11 into vart_no,vart_title,
vart_author,vart_keyword,vart_abstract,
vart_authorinstitute,vperd_volume,
vperd_issue,vperd_date,vpub_name,
vpub_issn,vclass_name;
IF length(vart_abstract)>1000 THEN
vart_abs1:=substr(vart_abstract,0,1000);
vart_abs2:=substr(vart_abstract,1001);
ELSE
vart_abs1:=vart_abstract;
vart_abs2:='';
END IF;
UTL_FILE.PUTF(OutputFile,'
【期刊類別】/n%s/n',vclass_name);
UTL_FILE.PUTF(OutputFile,'
【期刊刊號】/n%s/n',vpub_issn);
UTL_FILE.PUTF(OutputFile,'
【期刊名稱】/n%s/n',vpub_name);
UTL_FILE.PUTF(OutputFile,'
【期刊卷號】/n%s/n',vperd_volume);
UTL_FILE.PUTF(OutputFile,'
【期刊期號】/n%s/n',vperd_issue);
UTL_FILE.PUTF(OutputFile,'
【出版日期】/n%s/n',vperd_date);
UTL_FILE.PUTF(OutputFile,'
【中文標題】/n%s/n',vart_chntitle);
UTL_FILE.PUTF(OutputFile,'
【中文作者】/n%s/n',vart_chnauthor);
UTL_FILE.PUTF(OutputFile,'
【作者單位】/n%s/n',vart_authorinstitute);
UTL_FILE.PUTF(OutputFile,'
【中文要害詞】/n%s/n',vart_chnkeyword);
UTL_FILE.PUTF(OutputFile,'
【中文文摘】/n%s/n',vart_engabs1);
UTL_FILE.PUTF(OutputFile,'
【中文文摘2】/n%s/n',vart_engabs2);
UTL_FILE.FFLUSH(OutputFile);
exit when cperd11%NOTFOUND;
END LOOP;
close cperd11;
END;