oracle存儲過程讀寫文件操作_第1頁
oracle存儲過程讀寫文件操作_第2頁
oracle存儲過程讀寫文件操作_第3頁
oracle存儲過程讀寫文件操作_第4頁
oracle存儲過程讀寫文件操作_第5頁
已閱讀5頁,還剩2頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、racle提供的文件操作包UTL_FILE包中的UTL_FILE.FOPEN負責打開一個文件。 utl_file.fopen(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE; Location 是路徑參數, FILENAME 是文件名, OPEN_MODE是打開模式,'R'是讀文本,'W'是寫文本,'A'是附加文本,參數不分大小寫,如果指定'A'但是文件不存在,它會用

2、9;W'先創建出來,'W'有覆蓋的功能; 其中的location并不能簡單的指定為'D:/temp'等路徑,要建立一個DIRECTORY變量并付給權限(必須以DBA身份登錄): Sql代碼1. Create or replace directory D_OUTPUT as 'D:/TEMP'   2. grant   read ,write  on  directory&

3、#160;D_OUTPUT  to  testdb;  3. GRANT   EXECUTE   ON  utl_file  TO  testdb;  sql view plaincopy1. create or replace directory D_OUTPUT as 'D:/TEMP'  

4、;2. grant read,write on directory D_OUTPUT to testdb;  3. GRANT EXECUTE ON utl_file TO testdb;  之后就可以用UTL_FILE包建立文件了Sql代碼1. V_FILE UTL_FILE.FILE_TYPE;  2. V_FILE := UTL_FILE.FOPEN('D_OUTPUT'&#

5、160;,  'Data.txt' ,  'w' );  sql view plaincopy1. V_FILE UTL_FILE.FILE_TYPE;  2. V_FILE := UTL_FILE.FOPEN('D_OUTPUT', 'Data.txt', 'w');  就可以在數據庫服務器的D:/TEMP建立Data.txt 

6、;最近用到了Oracle的包UTL_FILE,網上卻沒找到關于它的函數,過程使用說明,雖然都不是很難的東西,但簡單列出來,也能提高些效率。FOPEN IS_OPEN GET_LINE PUT NEW_LINE PUT_LINE PUTF FFLUSH FCLOSE FCLOSE_ALL  UTL_FILE.FOPEN 用法FOPEN會打開指定文件并返回一個文件句柄用于操作文件。所有PL/SQL版本:      Ora

7、cle 8.0版及以上: FUNCTION UTL_FILE.FOPEN ( FUNCTION UTL_FILE.FOPEN (    location     IN VARCHAR2,      location     IN VARCHAR2,    filename     IN VARCHAR2,   

8、0;  filename     IN VARCHAR2,    open_mode    IN VARCHAR2)      open_mode    IN VARCHAR2, RETURN file_type;               

9、60; max_linesize IN BINARY_INTEGER)                                RETURN file_type;參數 location 文件地址 filename 文件名 openmo

10、de 打開文件的模式(參見下面說明) max_linesize文件每行最大的字符數,包括換行符。最小為1,最大為32767 3種文件打開模式:R 只讀模式。一般配合UTL_FILE的GET_LINE來讀文件。W 寫(替換)模式。文件的所有行會被刪除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用A 寫(附加)模式。原文件的所有行會被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用打開文件時注意以下幾點:文件路徑和文件名合起來必須表示操作系統中一個合法的文件。文件路徑必須存在

11、并可訪問;FOPEN并不會新建一個文件夾。如果你想打開文件進行讀操作,文件必須存在;如果你想打開文件進行寫操作,文件不存在時,會新建一個文件。如果你想打開文件進行附加操作,文件必須存在。A模式不同于W模式。文件不存在時,會拋出INVALID_OPERATION異常。FOPEN 會拋出以下異常UTL_FILE.INVALID_MODEUTL_FILE.INVALID_OPERATIONUTL_FILE.INVALID_PATHUTL_FILE.INVALID_MAXLINESIZEUTL_FILE.IS_OPEN 用法如果文件句柄指定的文件已打開,返回TRUE,否則FALSEFUNCT

12、ION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;UTL_FILE只提供一個方法去讀取數據:GET_LINEUTL_FILE.GET_LINE 用法讀取指定文件的一行到提供的緩存。PROCEDURE UTL_FILE.GET_LINE    (file IN UTL_FILE.FILE_TYPE,     buffer OUT VARCHAR2);file由FOPEN返回的文件句柄 buffer 讀取的一行數據的存放

13、緩存buffer必須足夠大。否則,會拋出VALUE_ERROR 異常。行終止符不會被傳進buffer。異常NO_DATA_FOUND VALUE_ERROR UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.READ_ERRORUTL_FILE.PUT 用法在當前行輸出數據PROCEDURE UTL_FILE.PUT     (file IN UTL_FILE.FILE_TYPE,     buffer OUT

14、VARCHAR2);file由FOPEN返回的文件句柄buffer包含要寫入文件的數據緩存;Oracle8.0.3及以上最大允許32kB,早期版本只有1023BUTL_FILE.PUT輸出數據時不會附加行終止符。UTL_FILE.PUT會產生以下異常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERRORUTL_FILE.NEW_LINE在當前位置輸出新行或行終止符,必須使用NEW_LINE來結束當前行,或者使用PUT_LINE輸出帶有行終止符的完整行數據。PROCEDURE UTL_FILE.NEW_L

15、INE    (file IN UTL_FILE.FILE_TYPE,     lines IN NATURAL := 1); file由FOPEN返回的文件句柄lines要插入的行數如果不指定lines參數,NEW_LINE會使用默認值1,在當前行尾換行。如果要插入一個空白行,可以使用以下語句:UTL_FILE.NEW_LINE (my_file, 2);如果lines參數為0或負數,什么都不會寫入文件。NEW_LINE會產生以下異常VALUE_ERRORUTL_FILE.INVALID_FILEHANDLEUT

16、L_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 輸出一個字符串以及一個與系統有關的行終止符PROCEDURE UT

17、L_FILE.PUT_LINE     (file IN UTL_FILE.FILE_TYPE,     buffer IN VARCHAR2);file由FOPEN返回的文件句柄buffer包含要寫入文件的數據緩存;Oracle8.0.3及以上最大允許32kB,早期版本只有1023B在調用UTL_FILE.PUT_LINE前,必須先打開文件。UTL_FILE.PUT_LINE會產生以下異常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.W

18、RITE_ERROR例子這里利用UTL_FILE.PUT_LINE從表emp讀取數據到文件:PROCEDURE emp2file IS   fileID UTL_FILE.FILE_TYPE;BEGIN   fileID := UTL_FILE.FOPEN ('/tmp', 'emp.dat', 'W');    /* Quick and dirty construction here! */   FOR emprec IN (SELECT * F

19、ROM emp)   LOOP      UTL_FILE.PUT_LINE          (TO_CHAR (emprec.empno) | ',' |          emprec.ename | ',' |        &#

20、160; .          TO_CHAR (emprec.deptno);   END LOOP;    UTL_FILE.FCLOSE (fileID);END;PUT_LINE相當于PUT后加上NEW_LINE;也相當于PUTF的格式串"%s/n"。UTL_FILE.PUTF以一個模版樣式輸出至多5個字符串,類似C中的printfPROCEDURE UTL_FILE.PUTF    (file I

21、N 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

22、由FOPEN返回的文件句柄format決定格式的格式串argN可選的5個參數,最多5個格式串可使用以下樣式%s在格式串中可以使用最多5個%s,與后面的5個參數一一對應/n換行符。在格式串中沒有個數限制%s會被后面的參數依次填充,如果沒有足夠的參數,%s會被忽視,不被寫入文件UTL_FILE.PUTF會產生以下異常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERRORUTL_FILE.FFLUSH確保所有數據寫入文件。PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);file由FOPEN返回的文件句柄操作系統可能會緩存數據來提高性能。因此可能調用put后,打開文件卻看不到寫入的數據。在關閉文件前要讀取數據的話可以使用UTL_FILE.FFLUSH。典型的使用方法包括分析執行進度和調試紀錄。UTL_FILE

溫馨提示

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

評論

0/150

提交評論