oracle中utl包两个文件合并成一个,Oracle之UTL_FILE 包用法详解

输出结果:

file exsits

file length:39802

block sieze :4096

FGETPOS

描述:此函数返回一个文件中当前的偏移位置。

语法:

UTL_FILE.FGETPOS (file IN FILE_TYPE) RETURN PLS_INTEGER;

注意事项:如果file没有打开,则会抛出异常。

测试:

DECLARE

l_loc    all_directories.directory_name%TYPE := 'CUX_LOG_DIR';

l_file  utl_file.file_type;

l_buffer VARCHAR2(32767);

BEGIN

l_file := utl_file.fopen(location  => l_loc,

filename  => 'l001.log',

open_mode => 'R');

dbms_output.put_line('before get_line: current position is ' || utl_file.fgetpos(file => l_file));

utl_file.get_line(file  => l_file,

buffer => l_buffer);

dbms_output.put_line('after  get_line: current position is ' || utl_file.fgetpos(file => l_file));

utl_file.fclose_all;

END;

结果:before get_line: current position is 0

afterget_line: current position is 3

FREMOVE

描述:此procedure在你有充足的权限之下,删除一个磁盘上的文件。

语法:

UTL_FILE.FREMOVE ( location IN VARCHAR2,

filename IN VARCHAR2);

FRENAME

描述:此procedure将一个存在的文件重命名,类似unix命令:mv

语法:

UTL_FILE.FRENAME ( src_locationIN VARCHAR2,

src_filenameIN VARCHAR2,

dest_locationIN VARCHAR2,

dest_filename IN VARCHAR2,

overwriteIN BOOLEAN DEFAULT FALSE);

参数:介绍略。

GET_LINE

描述:此procedure从一个打开的文件中读取一行文本,直到遇到换行符。

语法:

UTL_FILE.GET_LINE ( fileIN FILE_TYPE,

buffer OUT VARCHAR2,

lenIN PLS_INTEGER DEFAULT NULL);

参数:len从文本中读取一次的长度,默认是null,就取FOPEN时的max_linesieze。

IS_OPEN

描述:顾名思义。

语法:UTL_FILE.IS_OPEN (file IN FILE_TYPE)RETURN BOOLEAN;

PUT

描述:PUT写入内容到文件中。(每写一次,不带换行符)

语法:UTL_FILE.PUT (file IN FILE_TYPE, buffer IN VARCHAR2);

PUT_LINE

描述:PUT_LINE写入内容到文件中。(每写一次,末尾都加一个换行符)

语法:

UTL_FILE.PUT_LINE ( fileIN FILE_TYPE,

bufferIN VARCHAR2,

autoflush IN BOOLEAN DEFAULT FALSE);

PUTF

描述:写入格式化的内容到文件中。好比C语言的printf()

语法:

UTL_FILE.PUTF ( file IN FILE_TYPE,

format IN VARCHAR2,

[arg1 IN VARCHAR2 DEFAULT NULL,

. . .

arg5 IN VARCHAR2 DEFAULT NULL]);

参数:format包含格式化字符[\n,%s]的内容。

\n:代表一个换行符。

%s:用arg1~5的值去代替。

完整例子程序:

DECLARE

l_loc        all_directories.directory_name%TYPE := 'CUX_LOG_DIR';

l_file        utl_file.file_type;

l_file_exsits BOOLEAN;

l_file_length NUMBER;

l_block_size  BINARY_INTEGER;

l_buffer      VARCHAR2(32767);

--data

CURSOR c_hander IS

SELECT fu.user_name, fu.description

FROM fnd_user fu

WHERE 1 = 1

AND fu.user_name LIKE 'XXX%'

ORDER BY fu.user_name;

BEGIN

utl_file.fgetattr(location    => l_loc,

filename    => 'test.log',

fexists    => l_file_exsits,

file_length => l_file_length,

block_size  => l_block_size);

--put

IF l_file_exsits THEN

l_file  := utl_file.fopen(location  => l_loc,

filename  => 'test.log',

open_mode => 'w');

l_buffer := 'begining of file....';

utl_file.put_line(file  => l_file,

buffer => l_buffer);

FOR l IN c_hander LOOP

l_buffer := l.user_name || chr(9) || nvl(l.description,

'no description');

utl_file.put_line(file  => l_file,

buffer => l_buffer);

END LOOP;

l_buffer := 'end of file....';

utl_file.put_line(file  => l_file,

buffer => l_buffer);

--flush

utl_file.fflush(file => l_file);

--get

l_file := utl_file.fopen(location  => l_loc,

filename  => 'test.log',

open_mode => 'r');

utl_file.fgetattr(location    => l_loc,

filename    => 'test.log',

fexists    => l_file_exsits,

file_length => l_file_length,

block_size  => l_block_size);

LOOP

utl_file.get_line(file  => l_file,

buffer => l_buffer,

len    => 32767);

dbms_output.put_line(a => l_buffer);

EXIT WHEN utl_file.fgetpos(file => l_file) = l_file_length;

END LOOP;

END IF;

utl_file.fclose_all;

END;

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值