1 Utl_File包簡介
Oracle的UTL_FILE包用來實現對磁盤文件的I/O操做。
(1)Oracle10g以前的版本須要指定utl_file包能夠操做的目錄。
方法:
一、alter system set utl_file_dir='e:/utl' scope=spfile;
二、在init.ora文件中,配置以下:UTL_FILE=E:/utl或者UTL_FILE_DIR=E:/utl;
(2)Oracle10g以後的版本,只須要先建立一個路徑便可。
2 Utl_file包的依賴關係
SELECT name FROM dba_dependencies WHERE referenced_name = 'UTL_FILE'
UNION
SELECT referenced_name FROM dba_dependencies WHERE name = 'UTL_FILE';
3 UTL_FILE經常使用方法
3.1 FOPEN()
英文解釋:(1) Open a file for read operations
FOPEN會打開指定文件並返回一個文件句柄用於操做文件。
utl_file.fopen(
file_location IN VARCHAR2, --路徑
file_name IN VARCHAR2, --文件名稱
open_mode IN VARCHAR2, --打開模式 R 讀 W 寫 A 追加
max_linesize IN BINARY_INTEGER DEFAULT NULL)
RETURN file_type;
參數
location 文件地址
filename 文件名
openmode 打開文件的模式(參見下面說明)
3種文件打開模式:
(1) R只讀模式。通常配合UTL_FILE的GET_LINE來讀文件。
(2) W寫(替換)模式。文件的全部行會被刪除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH均可使用。
(3) A寫(附加)模式。原文件的全部行會被保留。在最末尾行附加新行。
PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH均可使用max_linesize 文件每行最大的字符數,包括換行符。最小爲1,最大爲32767。
打開文件時注意如下幾點:
* 文件路徑和文件名合起來必須表示操做系統中一個合法的文件。
* 文件路徑必須存在並可訪問;FOPEN並不會新建一個文件夾。
* 若是你想打開文件進行讀操做,文件必須存在;若是你想打開文件進行寫操做,文件不存在時,會新建一個文件。
* 若是你想打開文件進行附加操做,文件必須存在。A模式不一樣於W模式。文件不存在時,會拋出INVALID_OPERATION異常。
* FOPEN 會拋出如下異常:
(1)UTL_FILE.INVALID_MODE
(2)UTL_FILE.INVALID_OPERATION
(3)UTL_FILE.INVALID_PATH
(4)UTL_FILE.INVALID_MAXLINESIZE緩存
3.2 IS_OPEN()
英文解釋:Returns True If A File Handle Is Open: Otherwise False
utl_file.is_open(file IN FILE_TYPE) RETURN BOOLEAN;
3.3 GET_LINE()
英文解釋:Read a Line from a file
用法:
utl_file.getline(
file IN FILE_TYPE,
buffer OUT VARCHAR2,
len IN BINARY_INTEGER DEFAULT NULL);
UTL_FILE只提供一個方法去讀取數據:GET_LINE 。讀取指定文件的一行到提供的緩存。
函數原型:
PROCEDURE UTL_FILE.GET_LINE (file IN UTL_FILE.FILE_TYPE, buffer OUT VARCHAR2);
參數說明:
file 由FOPEN返回的文件句柄
buffer 讀取的一行數據的存放緩存
buffer必須足夠大。不然,會拋出VALUE_ERROR 異常。行終止符不會被傳進buffer。
異常:
NO_DATA_FOUND
VALUE_ERROR
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.READ_ERRORide
3.4 PUT()
英文解釋:Writes a string to a file
用法:
utl_file.put(file IN FILE_TYPE, buffer IN VARCHAR2);
函數原型:
PROCEDURE UTL_FILE.PUT (file IN UTL_FILE.FILE_TYPE, buffer OUT VARCHAR2);
參數說明:
file 由FOPEN返回的文件句柄
buffer 包含要寫入文件的數據緩存;Oracle8.0.3及以上最大容許32kB,早期版本只有1023B。
UTL_FILE.PUT輸出數據時不會附加行終止符。
異常:
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.5 NEW_LINE()
英文解釋:Writes one or more operating system-specific line terminators to a file
用法:
utl_file.new_line(file IN FILE_TYPE, lines IN NATURAL := 1);
UTL_FILE.NEW_LINE
在當前位置輸出新行或行終止符,必須使用NEW_LINE來結束當前行,或者使用PUT_LINE輸出帶有行終止符的完整行數據。
函數原型:
PROCEDURE UTL_FILE.NEW_LINE (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或負數,什麼都不會寫入文件。
異常:
VALUE_ERROR
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.6 PUT_LINE()
英文解釋:Writes a line to a file. Appends an operating system-specific line terminator
用法:
utl_file.put_line(
file IN FILE_TYPE,
buffer IN VARCHAR2,
autoflush IN BOOLEAN DEFAULT FALSE);
UTL_FILE.PUT_LINE
輸出一個字符串以及一個與系統有關的行終止符
函數原型:
PROCEDURE UTL_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.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.7 PUTF()
英文解釋:A PUT procedure with formatting
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);
UTL_FILE.PUTF
以一個模版樣式輸出至多5個字符串,相似C中的printf
函數原型:
PROCEDURE 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 決定格式的格式串
argN 可選的5個參數,最多5個格式串可以使用如下樣式
%s 在格式串中能夠使用最多5個%s,與後面的5個參數一一對應%s會被後面的參數依次填充,若是沒有足夠的參數,%s會被忽視,不被寫入文件
n 換行符。在格式串中沒有個數限制
異常:
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.8 PUT_RAW()
英文解釋:Accepts as input a RAW data value and writes the value to the output buffer函數
用法:
utl_file.put_raw(
file IN file_type,
buffer IN RAW,
autoflush IN BOOLEAN DEFAULT FALSE性能
);
3.9 FCLOSE()
函數做用:關閉命名的文件:
utl_file.fclose(file IN OUT file_type);
3.10 FCLOSE_ALL()
函數做用:關閉全部文件spa
3.11 FRENAME()
英文解釋:Rename An Operating System File
utl_file.frename (
src_location IN VARCHAR2,
src_filename IN VARCHAR2,
dest_location IN VARCHAR2,
dest_filename IN VARCHAR2,
overwrite IN BOOLEAN DEFAULT FALSE);
BEGIN
utl_file.frename(v_pathna, 'test.txt', v_pathna, 'x.txt', TRUE);
END frename;
/
存儲過程FRENAME修改一個文件的名稱,這樣咱們能夠把一個文件從一個位置移動到另一個位置。
函數原型:
FRENAME(location VARCHAR2,
filename VARCHAR2,
dest_dir VARCHAR2,
dest_file VARCHAR2,
[ overwrite BOOLEAN ])
參數:
location
目錄名稱,存放在pg_catalog.edb_dir.dirname中,這個目錄包含要更名的文件。
filename
要更名的源文件名稱。
dest_dir
目錄名稱,存放在pg_catalog.edb_dir.dirname中,這個目錄是被更名文件所在的目錄。
dest_file
原始文件的新名稱。
overwrite
若是設置爲」true」,在dest_dir目錄中覆蓋任何名爲dest_file的文件。若設置爲」false」,就會產生異常。這是缺省狀況。
3.12 FREMOVE()
英文解釋:Delete An Operating System File
utl_file.fremove(location IN VARCHAR2, filename IN VARCHAR2);
-- dump.txt is created in the FCOPY demo
BEGIN
utl_file.fremove(v_pathna, 'dump.txt');
END fremove;
/
3.13 FFLUSH()
英文解釋:Physically writes pending data to the file identified by the file handle
用法:
utl_file.fflush(file IN file_type);
函數原型:
PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);
參數說明:
file 由FOPEN返回的文件句柄
注意:
操做系統可能會緩存數據來提升性能。所以可能調用put後,打開文件卻看不到寫入的數據。在關閉文件前要讀取數據的話能夠使用UTL_FILE.FFLUSH。
典型的使用方法包括分析執行進度和調試紀錄。
異常:
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.14 FCOPY()
英文解釋:Copies a contiguous portion of a file to a newly created file
utl_file.fcopy(
src_location IN VARCHAR2,
src_filename IN VARCHAR2,
dest_location IN VARCHAR2,
dest_filename IN VARCHAR2,
start_line IN BINARY_INTEGER DEFAULT 1,
end_line IN BINARY_INTEGER DEFAULT NULL);
BEGIN
utl_file.fcopy(v_pathna, 'test.txt', v_pathna, 'dump.txt');
END;
UTL_FILE.FCOPY
存儲過程FCOPY把一個文件中文本拷貝到另一個文件中。
函數原型:
FCOPY(location VARCHAR2, filename VARCHAR2,dest_dir VARCHAR2, dest_file VARCHAR2[, start_line PLS_INTEGER [, end_line PLS_INTEGER ] ])
參數
location
表示目錄名稱,存放在pg_catalog.edb_dir.dirname中,這個目錄包含要拷貝的文件。
filename
要拷貝文件的名稱。
dest_dir
表示目錄名稱,存放在pg_catalog.edb_dir.dirname中,是源文件要拷貝到目的目錄。
dest_file
目標文件的名稱。
start_line
源文件中文本行號,用於指定開始拷貝的位置。缺省值是1。
end_line
源文件中最後一行要拷貝文本的行號。若是省略這個參數或者這個參數爲空,那麼就一直拷貝到文件中最後一行。操作系統