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;

效果:

相关推荐
剩下了什么19 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥20 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉20 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变20 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
山岚的运维笔记1 天前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里1 天前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科1 天前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦1 天前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
晚霞的不甘1 天前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
市场部需要一个软件开发岗位1 天前
JAVA开发常见安全问题:纵向越权
java·数据库·安全