视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
OracleUTL_FILE的使用
2020-11-09 11:21:32 责编:小采
文档


使用dbms_output输出有一个缺点是要到整个过程执行完毕才会把结果输出到屏幕,这样就无法在一个长时间运行的过程中通过dbms_outp

使用dbms_output输出有一个缺点是要到整个过程执行完毕才会把结果输出到屏幕,这样就无法在一个长时间运行的过程中通过dbms_output输出来随时监控执行状况。
为此可以使用utl_file包来输出文件。

utl_file.fopen 打开文件
utl_file.put_line 输出文件
utl_file.get_line 读取文件
utl_file.fclose 关闭文件
utl_file.fflush 强制输出缓冲
utl_file.fopen的第一个参数指定文件所在目录,这个目录必须包含在utl_file_dir参数指定的目录列表中,,或者指定一个directory对象。否则fopen()会报错。

1)utl_file_dir
设置这个参数必须重起数据库,可以指定多个目录(用逗号隔开)。如果指定为*,表示任意目录。
alter system set utl_file_dir='\u01\Oracle','\u02\oracle' scope=spfile;

2)directory
创建一个directory对象并赋予所有用户读写权利
create or replace directory logfile_target as '/u01/oracle';
grant read,write on directory logfile_target to public;
察看已有的directory对象
select * from dba_directories;

3)使用utl_file包输出文件
DECLARE
l_file utl_file.file_type;
BEGIN
l_file := utl_file.fopen('LOGFILE_TARGET', 'sql.log', 'W');
for row in (select * from user_tables)
loop
utl_file.put_line(l_file, dbms_metadata.get_ddl('TABLE', row.table_name));
end loop;
utl_file.fclose(l_file);
END;
*这里也可以写成utl_file.fopen('/u01/oracle', 'sql.log', 'W');
*fopen()的第三个参数OPEN_MODE,可以指定为
r -- read text
w -- write text
a -- append text
rb -- read byte mode
wb -- write byte mode
ab -- append byte mode
如果指定'a'或者'ab'但是文件不存在会先创建。

下载本文
显示全文
专题