首页 > 数据库 > mysql教程 > Oracle UTL_FILE的使用

Oracle UTL_FILE的使用

WBOY
发布: 2016-06-07 17:17:03
原创
1256 人浏览过

使用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'但是文件不存在会先创建。

linux

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板