Oracle利用UTL_FILE记录日志功能

Oracle利用UTL_FILE记录日志功能

1.功能描述

采用UTL_FILE包的功能进行创建log文件以及输出log信息

2.关于UTL_FILE

Oracle提供的文件操作包UTL_FILE包中的UTL_FILE.FOPEN负责打开一个文件。

sql 复制代码
UTL_FILE.FOPEN(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE;

Location 是路径参数;

FILENAME 是文件名;

OPEN_MODE是打开模式,'R'是读文本,'W'是写文本,'A'是附加文本,参数不分大小写,如果指定'A'但是文件不存在,它会用'W'先创建出来,'W'有覆盖的功能;

其中的location并不能简单的指定为'D:\temp'等路径,要建立一个DIRECTORY变量并付给权限(必须以DBA身份登录):

sql 复制代码
create or replace directory D_OUTPUT as 'D:\TEMP';
grant read, write on directory D_OUTPUT to public;

注:如上述代码所示,在D盘需要手动创建命名为TEMP的文件夹,执行上述代码,并不会自动创建相关文件夹,上述代码在于定义,并赋予该定义的权限,此处是public

之后就可以用UTL_FILE包建立文件了:

sql 复制代码
FILE_HANDLE := UTL_FILE.FOPEN('D_OUTPUT', 'log.txt', 'A');

写文件以及关闭:

sql 复制代码
UTL_FILE.put_line(FILE_HANDLE, write_string); 
UTL_FILE.FCLOSE(FILE_HANDLE);

完整代码如下:

sql 复制代码
CREATE OR REPLACE Procedure log_write_Info (name_string In Varchar2,dispaly_string In Varchar2)
As
 FILE_HANDLE UTL_FILE.FILE_TYPE;
 pro_date date;
Begin
  select sysdate into pro_date from dual;
   FILE_HANDLE := UTL_FILE.FOPEN('D_OUTPUT', name_string||'-'||to_char(pro_date,'yyyy-mm-dd')||'-log.txt', 'A');
  UTL_FILE.put_line(FILE_HANDLE,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')||'--------'||dispaly_string); 
 
  UTL_FILE.FCLOSE(FILE_HANDLE);
End log_write_Info;

3.调用存储过程写日志

sql 复制代码
begin

   log_write_Info('调试','111');--procedure是存储过程名

end;

效果:

相关推荐
小突突突20 分钟前
总结 MyBatis 的XML实现方法
xml·oracle·mybatis
快来卷java25 分钟前
深入剖析雪花算法:分布式ID生成的核心方案
java·数据库·redis·分布式·算法·缓存·dreamweaver
tpoog30 分钟前
[MySQL]数据类型
android·开发语言·数据库·mysql·算法·adb·贪心算法
爱吃喵的鲤鱼1 小时前
MySQL增删改查(CRUD)操作详解与实战指南
数据库·mysql
啞謎专家1 小时前
在rockylinux9.4安装mongodb报错:缺少:libcrypto.so.10文件库
数据库·mongodb
chat2tomorrow2 小时前
数据仓库是什么?数据仓库的前世今生 (数据仓库系列一)
大数据·数据库·数据仓库·低代码·华为·spark·sql2api
ssxueyi3 小时前
StarRocks 部署:依赖环境
服务器·数据库·starrocks·php
.又是新的一天.3 小时前
02_MySQL安装及配置
android·数据库·mysql
库海无涯3 小时前
如何把数据从SQLite迁移到PostgreSQL
数据库·postgresql·sqlite
明明明h4 小时前
MySQL 查看本地用户名和密码
数据库·mysql·adb