ORACLE在存储过程中记录日志的处理包

Java开发过程中一般使用LOG4J来将程序的运行日志记录到文件中,在ORACLE存储过程中也需要记录日志,我将工作中自己整理的一个记录日志的包分享出来,其实很简单,希望大家多提意见。

一、表结构

为了能给运维人员查看到相关日志,日志最好记录在表中,表信息如下:

其中序号并不是必须的,日志级别参考了LOG4J的日志类型,但没有全部拿过来,只是将常用的几个拿过来了。

二、实现

实现就是按照表结构插入数据了,这里为了更方便一些,定义了一个包,插入时对字段进行了长度4000的截取,详细如下:

[sql]

create or replace package body PKG_LOG is
/*存储过程记录日志*/
/*记录消息*/
PROCEDURE INFO(p_proc_name varchar2, title varchar2, content varchar2) is
begin
INSERT INTO t_proc_logs(xh,proc_mc,title,content, log_type,log_time)
VALUES (SEQ_T_PROC_LOGS_XH.NEXTVAL, upper(p_proc_name), substr(title,1,4000), substr(content,1,4000), ‘INFO‘,sysdate);
COMMIT;
EXCEPTION WHEN OTHERS THEN
NULL;
ROLLBACK;
END;
/*记录测试*/
PROCEDURE DEBUG(p_proc_name varchar2, title varchar2, content varchar2) is
begin
INSERT INTO t_proc_logs(xh,proc_mc,title,content, log_type,log_time)
VALUES (SEQ_T_PROC_LOGS_XH.NEXTVAL, upper(p_proc_name), substr(title,1,4000), substr(content,1,4000), ‘DEBUG‘,sysdate);
COMMIT;
EXCEPTION WHEN OTHERS THEN
NULL;
ROLLBACK;
END;
/*记录错误*/
PROCEDURE ERROR(p_proc_name varchar2, title varchar2, content varchar2) is
begin
INSERT INTO t_proc_logs(xh,proc_mc,title,content, log_type,log_time)
VALUES (SEQ_T_PROC_LOGS_XH.NEXTVAL, upper(p_proc_name), substr(title,1,4000), substr(content,1,4000), ‘ERROR‘,sysdate);
COMMIT;
EXCEPTION WHEN OTHERS THEN
NULL;
ROLLBACK;
END;

end PKG_LOG;

三、使用

只要在需要进行记录日志的时候调用:PKG_LOG.INFO(‘日志标题’,‘日志内容’)即可,和LOG4J的使用一致。

相关源码下载地址:http://download.csdn.net/detail/hereyouare/8380443

四、扩展和完善

1.可以做一个界面,对日志表进行查询,可以更方便查看日志,并可通过查询是否有ERROR日志,判断指定的的存储过程运行是否正常。

2.由于日志是记录在数据库中,所以需要建立一个定时任务,将DEBUG或INFO的数据,通过日志时间删除掉,以保证日志表里的数据不会过度增长。

时间: 2024-11-14 11:14:27

ORACLE在存储过程中记录日志的处理包的相关文章

Oracle在存储过程中如何返回结果集

Oracle和Sqlserver不一样的地方有很多. 个人最深的体会是存储过程返回结果集,在Sqlserver中直接select查询就行,Oracle就不行了. 这里,就用最简单的例子说明存储过程返回结果集的例子 CREATE OR REPLACE PROCEDURE 存储过程名( 字段名 in VARCHAR2, l_result OUT TYPES.RQ_REF_CURSOR -- 包里面方法名 ) is str_sql varchar2(8000) := ''; begin str_sql

oracle创建存储过程中遇到的问题

create or replace PROCEDURE CLEAR AS tname varchar(200);BEGIN tname:='''immediate trace name flush_cache'''; ------->>这一句中,单引号的作用相当于转义字符,将其中的一个单引号转义为要使用的单引号,不表示oracle中字符串的标                                                                      识,也就是这个

在oracle存储过程中创建临时表

在oracle的存储过程中,不能直接使用DDL语句,比如create.alter.drop.truncate等. 那如果我们想在存储过程中建立一张临时表就只能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建临时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

在oracle存储过程中创建暂时表

在oracle的存储过程中,不能直接使用DDL语句,比方create.alter.drop.truncate等. 那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建暂时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

Oracle 在JDBC中使用 存储过程,包

前提: 在Oracle中已经定义  存储过程  和  存储函数 和  包 导入了Oracle的JDBC   jar  包 1 package demo; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class J

Oracle存储过程中异常Exception的捕捉和处理

Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Varchar2) AUTHID CURRENT_USER AS --声明异常 some_kinds_of_err EXCEPTION; -- Exception to indicate an error condition v_ErrorCode NUMBER; -- Variable to hold

java 实现往oracle存储过程中传递array数组类型的参数

注:本文来源于 <  java 实现往oracle存储过程中传递array数组类型的参数  > 最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码就不写上了,因为项目中存储过程的调用方法全部是封装好的(好像现在都这样,都姓3层,嘿嘿) 原理: 1.一维数组 A.单纯的一维数组的话,直接建立一个table类型就可以 1 TYPE TYPE_VARCHAR AS TABLE OF VARCHAR2(200); 2.多维数组 A.多维数组就要稍加修改了,如

Oracle存储过程中跳出循环的写法

Oracle存储过程中跳出循环的写法 博客分类: oracle Oracle 记录exit和return的用法 exit用来跳出循环 loop IF V_KBP IS NULL THEN           EXIT;    END IF; end loop; return跳出存储过程 loop IF V_KBP IS NULL THEN         return;    END IF; end loop; 跳出loop 一次循环 oracle 11g已提供continue; oracle

Oracle 存储过程中的 =&gt;

oracle实参与形参有两种对应方式1.一种是位置方式,和面向对象语言参数传递类似;2.另外一种是=> 作为形参对应,因为位置对应方法有缺限,比如一个函数有3个参数,但第2个是可以不传(有默认值),这里就没办法位置对应方法,oralce内部一般用此种方法作参数传递. CREATE OR REPLACE PROCEDURE HelloWorld( p_user_name VARCHAR2, p_val1 VARCHAR2 DEFAULT ' Good Moning,', p_val2 VARCHA