日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle utl_file fcopy,ORACLE之UTL_FILE包详解

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle utl_file fcopy,ORACLE之UTL_FILE包详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 Utl_File包簡介

Oracle的UTL_FILE包用來實現對磁盤文件的I/O操作。

(1)Oracle10g之前的版本需要指定utl_file包可以操作的目錄。

方法:

1、alter system set utl_file_dir=‘e:/utl‘ scope=spfile;

2、在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_ERROR

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()

函數作用:關閉所有文件

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

源文件中最后一行要拷貝文本的行號。如果省略這個參數或者這個參數為空,那么就一直拷貝到文件中最后一行。

原文:http://www.cnblogs.com/oracle-dba/p/3856130.html

總結

以上是生活随笔為你收集整理的oracle utl_file fcopy,ORACLE之UTL_FILE包详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。