PLSQL操作ORACLE服务器上的⽂件
在做oracle plsql 编程的时候,难免要对⽂件进⾏操作,如读取oracle服务器上的别的⽬录下的数据⽂件,导⼊到oracle库中;虽然在plsql developer⼯具中提供了debug功能,但当有输出时,debug的控制台不能及时看到,除⾮停⽌debug。如果在plsql程序中输出⽇志信息到⽂件中,使得plsql程序调试、运⾏跟中更加⽅便,因为⼤家都知道⽇志的作⽤是什么。
下⾯讲讲怎么在oracle的plsql程序中写⼊⽇志到oracle服务器的⽂件中。虽然我们是⽤plsql developer开发和运⾏plsql程序,但是plsql developer经常是安装在远程计算机上,这⾥说的操作⽂件,是指plsql操作oracle dbms所在的服务器上,如果oracle安装在linux系统,则是操作linux上的⽂件;安装在windows上,则是操作windows上的⽂件,对于本次演⽰前者会相对⿇烦些,后者容易些。因为我⽤的oracle安装在linux上,所以以linux系统为例讲解。
注:“--”表⽰注释⾏
⼀、建⽴存放⽇志⽂件的⽬录。 1.以root权限登录linux系统。 2.创建⼀个⽬录存放⽇志⽂件。 # mkdir /home/oracle/plog
3.进⼊/home/oracle/,赋予oracle⽤户对plog⽬录读写权限 # chown oracle plog
4.检验oracle⽤户是否对该⽬录有读写权限,切换到oracle⽤户下 # su oracle $ cd plog $ touck plsql.log
-- 这⾥是创建⼀个⽂件的意思,如果没有权限,则创建失败并提⽰。 -- 如果创建成功,则说明权限授权成功,我们可以把plsql.log删除 $ rm plsql.log,这个随便。
⼆、介绍plsql程序中操作⽂件,oracle提供 utl_file 包是专门⽤来操作磁盘上的⽂件。 1.需要创建⼀个directory对象
SQL>create or replace directory plog_dir as'/home/oracle/plog';
2.以sys⽤户登录plsql developer,给运⾏plsql的程序⽤户授权对该⽬录可写、可读的权限;对 utl_file 有可执⾏的权限。 SQL>grant read,write on directory plog_dir to scott;
SQL>GRANT EXECUTEON utl_file TO scott;--scott是登录oracle数据库的⼀个⽤户。 3.编写⼀个写⼊⽇志的存储过程。
createorreplaceprocedure logger
(
v_file_name invarchar2,--存放⽇志⽂件名 v_log_msg invarchar2--⽇志消息)
is
v_file_handle utl_file.file_type;--声明⼀个⽂件操作句柄
begin
v_file_handle:=utl_file.fopen('PLOG_DIR',v_file_name,'a');--实例化⼀个句柄 utl_file.put_line(v_file_handle,v_log_msg);--写⼊信息 utl_file.fflush(v_file_handle);--把缓冲区的信息写⼊⽂件 utl_file.fclose(v_file_handle); --关闭⽂件句柄
exception
whenothersthen
dbms_output.put_line('插⼊⽇志异常,错误代码是:'||sqlcode||'错误消息是:'||sqlerrm);end;
注:1.'PLOG_DIR'是directory,必须⼤写2.'a'是在⽇志⽂件后追加信息 三、在需要写⼊⽇志的地⽅调⽤该存储过程,就可以了。 execute logger('wt.txt','this is a testing for plsql writer !');