UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了在客户端(FORM等等)和服务器端的文件访问功能。创建测试目录:新建一个command window;创建目录:(以system用户登录数据库)SQL> create or replace directory cux_log_dir as "/home/appltest/debug";Directory created赋权限。SQL> grant read, write on directory cux_log_dir to public;Grant succeeded检查目录是否成功创建select * FROM all_directories dir WHERE dir.DIRECTORY_NAME = "CUX_LOG_DIR";Ps:视图all_directories存放着我们能否访问的目录对象。如果要删除目录,也需用system用户登录数据库,执行如下命令:Drop directory cux_log_dir; 过程和函数:
- FOPEN
描述:打开一个文件,基本上在我们对文件进行读写动作之前都需要先执行这个function来打开文件先。语法:UTL_FILE.FOPEN (location IN VARCHAR2,filename IN VARCHAR2,open_mode IN VARCHAR2,max_linesize IN BINARY_INTEGER DEFAULT 1024)RETURN FILE_TYPE;参数:location略。Filename略。open_mode指明文件打开的模式。有如下几种:■r –只读(文本)■ w – 只写(本文)■ a – 追加(文本)■ rb – 只读(字节)■ wb – 只写(字节)■ ab – 追加(字节)(注:当使用模式:a或者ab的时候,如果文件不存在,则会以write模式创建此文件)max_linesize指定文件文本每一行存放的最大字符数。返回值:FOPEN返回一个接下来我们的程序将要使用到的文件的指针
- FCLOSE
功能:关闭一个打开的文件。语法:UTL_FILE.FCLOSE (file IN OUT FILE_TYPE);参数:1. file->调用FOPEN或者FOPEN_NVCHAR返回的活动中的文件指针。注意事项:当FCLOSE执行的时候,如果还有缓冲数据没有及时写入到文件中,那么程序就会raise一个异常:WRITE_ERROR。可以在PUT_LINE的时候加上参数autoflush => TRUE;或者在每次PUT之后执行:FFLUSH。
- FCLOSE_ALL
功能:此procedure将会关闭本次session所有打开的文件。它用来紧急情况的清理功能,例如当PL/SQL程序在EXCEPTION部分退出时。语法:UTL_FILE.FCLOSE_ALL;注意事项:FCLOSE_ALL不会修改所打开的文件的状态,也就是说执行了FCLOSE_ALL后,再用IS_OPEN去检测文件,结果还是打开状态,但是之后,这些文件任然是不能去read或者write的。而FCLOSE执行后,相关的文件则完全关闭了,测试:
结果为:
结果为:
- FCOPY
功能:此procedure复制一个文件的连续部分内容或者全部内容到一个新创建的文件。如果参数start_line和end_line省略的话,默认地会复制整个文件。此操作会将源文件以read模式打开,将目标文件以write模式打开。语法:UTL_FILE.FCOPY ( src_locationIN VARCHAR2,src_filenameIN VARCHAR2,dest_locationIN VARCHAR2,dest_filename IN VARCHAR2,start_lineIN BINARY_INTEGER DEFAULT 1,end_lineIN BINARY_INTEGER DEFAULT NULL); 参数:src_location来源文件的目录名。取值来源是视图ALL_DIRECTORIES的DIRECTORY_NAME;src_filename将要被复制的来源文件dest_location 被创建的目标文件存放的目录名。dest_filename 从来源文件创建的目标文件。start_line要复制的内容起始行号,默认为1,表示从第一行开始复制。end_line 要复制的内容的终止行号,默认NULL,表示文件的末尾。 测试程序之前:
测试代码:
测试程序之后:
并且l001-copy.log文件中的内容只有两行:
- FFLUSH
描述:FFLUSH强制将缓冲的数据写入文件。因为通常待写入文件的数据都是都在缓冲存储位置。当有必要去read一个任然处于打开状态的文件时,FFLUSH就起作用了,例如在调试程序中,可以将调试的消息及时冲到文件中,已便于我们马上就能read这些内容。语法:UTL_FILE.FFLUSH (file IN FILE_TYPE);
- FGETATTR
描述:FGETATTR读取磁盘上的文件并返回文件的属性。语法:UTL_FILE.FGETATTR( location IN VARCHAR2,filename IN VARCHAR2,fexists OUT BOOLEAN,file_length OUT NUMBER,block_size OUT BINARY_INTEGER);参数:location 此处略去X个字。filename此处略去X个字。fexists 返回的属性1:文件是否存在file_length 返回的属性2:文件字节长度,如果文件不存在,则返回NULL。block_size文件系统块的字节大小。 测试: 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(1024);
BEGIN
utl_file.fgetattr(location => l_loc,
filename => "l001.log",
fexists => l_file_exsits,
file_length => l_file_length,
block_size => l_block_size);
IF l_file_exsits THEN
l_file := utl_file.fopen(location => l_loc,
filename => "l001.log",
open_mode => "R");
dbms_output.put_line("file exsits");
dbms_output.put_line("file length:" || l_file_length);
dbms_output.put_line("block sieze :" || l_block_size);
END IF;
utl_file.fclose_all;END;
Oracle中utl_file包的使用Oracle之DBMS_RANDOM 包用法详解相关资讯 utl_file
- Oracle中utl_file包的使用 (03/18/2014 17:11:34)
本文评论 查看全部评论 (0)