oracle存儲過程讀寫文件操作.doc_第1頁
oracle存儲過程讀寫文件操作.doc_第2頁
oracle存儲過程讀寫文件操作.doc_第3頁
oracle存儲過程讀寫文件操作.doc_第4頁
oracle存儲過程讀寫文件操作.doc_第5頁
免費預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

racle提供的文件操作包UTL_FILE包中的UTL_FILE.FOPEN負責(zé)打開一個文件。utl_file.fopen(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE;Location 是路徑參數(shù),F(xiàn)ILENAME 是文件名,OPEN_MODE是打開模式,R是讀文本,W是寫文本,A是附加文本,參數(shù)不分大小寫,如果指定A但是文件不存在,它會用W先創(chuàng)建出來,W有覆蓋的功能;其中的location并不能簡單的指定為D:/temp等路徑,要建立一個DIRECTORY變量并付給權(quán)限(必須以DBA身份登錄):Sql代碼1. Create or replacedirectoryD_OUTPUTasD:/TEMP;2. grantread,writeondirectoryD_OUTPUTtotestdb;3. GRANTEXECUTEONutl_fileTOtestdb;sqlview plaincopy1. createorreplacedirectoryD_OUTPUTasD:/TEMP;2. grantread,writeondirectoryD_OUTPUTtotestdb;3. GRANTEXECUTEONutl_fileTOtestdb;之后就可以用UTL_FILE包建立文件了Sql代碼1. V_FILEUTL_FILE.FILE_TYPE;2. V_FILE:=UTL_FILE.FOPEN(D_OUTPUT,Data.txt,w);sqlview plaincopy1. V_FILEUTL_FILE.FILE_TYPE;2. V_FILE:=UTL_FILE.FOPEN(D_OUTPUT,Data.txt,w);就可以在數(shù)據(jù)庫服務(wù)器的D:/TEMP建立Data.txt最近用到了Oracle的包UTL_FILE,網(wǎng)上卻沒找到關(guān)于它的函數(shù),過程使用說明,雖然都不是很難的東西,但簡單列出來,也能提高些效率。FOPENIS_OPENGET_LINEPUTNEW_LINEPUT_LINEPUTFFFLUSHFCLOSEFCLOSE_ALLUTL_FILE.FOPEN用法FOPEN會打開指定文件并返回一個文件句柄用于操作文件。所有PL/SQL版本:Oracle 8.0版及以上:FUNCTION UTL_FILE.FOPEN (FUNCTION UTL_FILE.FOPEN ( location IN VARCHAR2, location IN VARCHAR2, filename IN VARCHAR2, filename IN VARCHAR2, open_mode IN VARCHAR2) open_mode IN VARCHAR2,RETURN file_type; max_linesize IN BINARY_INTEGER) RETURN file_type;參數(shù)location文件地址filename文件名openmode打開文件的模式(參見下面說明)max_linesize文件每行最大的字符數(shù),包括換行符。最小為1,最大為327673種文件打開模式:R 只讀模式。一般配合UTL_FILE的GET_LINE來讀文件。W 寫(替換)模式。文件的所有行會被刪除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用A 寫(附加)模式。原文件的所有行會被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用打開文件時注意以下幾點:文件路徑和文件名合起來必須表示操作系統(tǒng)中一個合法的文件。文件路徑必須存在并可訪問;FOPEN并不會新建一個文件夾。如果你想打開文件進行讀操作,文件必須存在;如果你想打開文件進行寫操作,文件不存在時,會新建一個文件。如果你想打開文件進行附加操作,文件必須存在。A模式不同于W模式。文件不存在時,會拋出INVALID_OPERATION異常。FOPEN 會拋出以下異常UTL_FILE.INVALID_MODEUTL_FILE.INVALID_OPERATIONUTL_FILE.INVALID_PATHUTL_FILE.INVALID_MAXLINESIZEUTL_FILE.IS_OPEN用法如果文件句柄指定的文件已打開,返回TRUE,否則FALSEFUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;UTL_FILE只提供一個方法去讀取數(shù)據(jù):GET_LINEUTL_FILE.GET_LINE用法讀取指定文件的一行到提供的緩存。PROCEDURE UTL_FILE.GET_LINE (file IN UTL_FILE.FILE_TYPE, buffer OUT VARCHAR2);file由FOPEN返回的文件句柄buffer讀取的一行數(shù)據(jù)的存放緩存buffer必須足夠大。否則,會拋出VALUE_ERROR 異常。行終止符不會被傳進buffer。異常NO_DATA_FOUNDVALUE_ERRORUTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.READ_ERRORUTL_FILE.PUT用法在當(dāng)前行輸出數(shù)據(jù)PROCEDURE UTL_FILE.PUT (file IN UTL_FILE.FILE_TYPE, buffer OUT VARCHAR2);file由FOPEN返回的文件句柄buffer包含要寫入文件的數(shù)據(jù)緩存;Oracle8.0.3及以上最大允許32kB,早期版本只有1023BUTL_FILE.PUT輸出數(shù)據(jù)時不會附加行終止符。UTL_FILE.PUT會產(chǎn)生以下異常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERRORUTL_FILE.NEW_LINE在當(dāng)前位置輸出新行或行終止符,必須使用NEW_LINE來結(jié)束當(dāng)前行,或者使用PUT_LINE輸出帶有行終止符的完整行數(shù)據(jù)。PROCEDURE UTL_FILE.NEW_LINE (file IN UTL_FILE.FILE_TYPE, lines IN NATURAL := 1);file由FOPEN返回的文件句柄lines要插入的行數(shù)如果不指定lines參數(shù),NEW_LINE會使用默認值1,在當(dāng)前行尾換行。如果要插入一個空白行,可以使用以下語句:UTL_FILE.NEW_LINE (my_file, 2);如果lines參數(shù)為0或負數(shù),什么都不會寫入文件。NEW_LINE會產(chǎn)生以下異常VALUE_ERRORUTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERROR例子如果要在UTL_FILE.PUT后立刻換行,可以如下例所示:PROCEDURE add_line (file_in IN UTL_FILE.FILE_TYPE, line_in IN VARCHAR2)ISBEGIN UTL_FILE.PUT (file_in, line_in); UTL_FILE.NEW_LINE (file_in);END;UTL_FILE.PUT_LINE輸出一個字符串以及一個與系統(tǒng)有關(guān)的行終止符PROCEDURE UTL_FILE.PUT_LINE (file IN UTL_FILE.FILE_TYPE, buffer IN VARCHAR2);file由FOPEN返回的文件句柄buffer包含要寫入文件的數(shù)據(jù)緩存;Oracle8.0.3及以上最大允許32kB,早期版本只有1023B在調(diào)用UTL_FILE.PUT_LINE前,必須先打開文件。UTL_FILE.PUT_LINE會產(chǎn)生以下異常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERROR例子這里利用UTL_FILE.PUT_LINE從表emp讀取數(shù)據(jù)到文件:PROCEDURE emp2fileIS fileID UTL_FILE.FILE_TYPE;BEGIN fileID := UTL_FILE.FOPEN (/tmp, emp.dat, W); /* Quick and dirty construction here! */ FOR emprec IN (SELECT * FROM emp) LOOP UTL_FILE.PUT_LINE (TO_CHAR (emprec.empno) | , | emprec.ename | , | . TO_CHAR (emprec.deptno); END LOOP; UTL_FILE.FCLOSE (fileID);END;PUT_LINE相當(dāng)于PUT后加上NEW_LINE;也相當(dāng)于PUTF的格式串%s/n。UTL_FILE.PUTF以一個模版樣式輸出至多5個字符串,類似C中的printfPROCEDURE UTL_FILE.PUTF (file IN FILE_TYPE ,format IN VARCHAR2 ,arg1 IN VARCHAR2 DEFAULT NULL ,arg2 IN VARCHAR2 DEFAULT NULL ,arg3 IN VARCHAR2 DEFAULT NULL ,arg4 IN VARCHAR2 DEFAULT NULL ,arg5 IN VARCHAR2 DEFAULT NULL);file由FOPEN返回的文件句柄format決定格式的格式串a(chǎn)rgN可選的5個參數(shù),最多5個格式串可使用以下樣式%s在格式串中可以使用最多5個%s,與后面的5個參數(shù)一一對應(yīng)/n換行符。在格式串中沒有個數(shù)限制%s會被后面的參數(shù)依次填充,如果沒有足夠的參數(shù),%s會被忽視,不被寫入文件UTL_FILE.PUTF會產(chǎn)生以下異常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERRORUTL_FILE.FFLUSH確保所有數(shù)據(jù)寫入文件。PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);file由FOPEN返回的文件句柄操作系統(tǒng)可能會緩存數(shù)據(jù)來提高性能。因此可能調(diào)用put后,打開文件卻看不到寫入的數(shù)據(jù)。在關(guān)閉文件前要讀取數(shù)據(jù)的話可以使用UTL_FILE.FFLUSH。典型的使用方法包括分析執(zhí)行進度和調(diào)試紀(jì)錄。UTL_FILE.FFLUSH會產(chǎn)生以下異常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERRORUTL_FILE.FCLOSE關(guān)閉文件PROCEDURE UTL_FILE.FCLOSE (file IN OUT FILE_TYPE);file由FOPEN返回的文件句柄注意file是一個IN OUT參數(shù),因為在關(guān)閉文件后會設(shè)置為NULL當(dāng)試圖關(guān)閉文件時有緩存數(shù)據(jù)未寫入文件,會拋出WRITE_ERROR異常UTL_FILE.FCLOSE會產(chǎn)生以下異常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.WRITE_ERRORUTL_FILE.FCLOSE_ALL關(guān)閉所有已打開的文件PROCEDURE UTL_FILE.FCLOSE_ALL;在結(jié)束程序時要確保所有打開的文件已關(guān)閉

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論