Oracle存储过程实现记录日志

2022-08-18 20:14:34 浏览数 (1)

Oracle存储过程实现记录日志

create table -- Create table create table t_cem_proc_logs (   id      varchar2(32),   proc_mc  varchar2(100),   title    varchar2(4000),   content  clob,   log_type varchar2(10),   log_time date default sysdate ) ; -- Add comments to the table comment on table t_cem_proc_logs   is '日志'; -- Add comments to the columns comment on column t_cem_proc_logs.id   is 'id'; comment on column t_cem_proc_logs.proc_mc   is '过程名'; comment on column t_cem_proc_logs.title   is '标题'; comment on column t_cem_proc_logs.content   is '内容'; comment on column t_cem_proc_logs.log_type   is '日志级别:info,error,debug'; comment on column t_cem_proc_logs.log_time   is '时间'; -- Create/Recreate primary, unique and foreign key constraints alter table t_cem_proc_logs   add constraint pri_proc_logs primary key (ID);

-- Create table create table T_CEM_TASK_LOG (   id          VARCHAR2(32) not null,   task_id      VARCHAR2(100),   task_code    VARCHAR2(100),   start_date  DATE,   end_date    DATE,   log_status  VARCHAR2(2),   log_message  VARCHAR2(4000),   createdate  DATE,   requestdata  CLOB,   responsedata CLOB,   modifytime  DATE,   corpid      VARCHAR2(32) ); -- Add comments to the table comment on table T_CEM_TASK_LOG   is '调度日志'; -- Add comments to the columns comment on column T_CEM_TASK_LOG.id   is 'ID'; comment on column T_CEM_TASK_LOG.task_id   is '调度标识'; comment on column T_CEM_TASK_LOG.task_code   is '调度任务代码'; comment on column T_CEM_TASK_LOG.start_date   is '开始执行时间'; comment on column T_CEM_TASK_LOG.end_date   is '执行结束时间'; comment on column T_CEM_TASK_LOG.log_status   is '状态 0:执行中 1:执行完成 2:执行错误'; comment on column T_CEM_TASK_LOG.log_message   is '日志信息'; comment on column T_CEM_TASK_LOG.createdate   is '创建日期'; comment on column T_CEM_TASK_LOG.requestdata   is '请求报文'; comment on column T_CEM_TASK_LOG.responsedata   is '返回报文'; comment on column T_CEM_TASK_LOG.modifytime   is '修改时间'; comment on column T_CEM_TASK_LOG.corpid   is '企业id'; -- Create/Recreate indexes create index T_CEM_TASK_LOG_N1 on T_CEM_TASK_LOG (TASK_ID); -- Create/Recreate primary, unique and foreign key constraints alter table T_CEM_TASK_LOG   add constraint T_CEM_TASK_LOG_PK primary key (ID);

Create sequence -- Create sequence create sequence seq_log minvalue 1 maxvalue 99999999 start with 1 increment by 1 cache 20 cycle;

package CREATE OR REPLACE PACKAGE LOGUTILS IS

 -- Author  : DYB  -- Created : 2017/3/28 10:34:51  -- Purpose : 日志记录工具类

 --日志  PROCEDURE LOG(P_TASK_ID    VARCHAR2,         P_TASK_CODE  VARCHAR2,         P_START_DATE  DATE DEFAULT NULL,         P_END_DATE    DATE DEFAULT NULL,         P_LOG_STATUS  VARCHAR2 DEFAULT NULL,         P_LOG_MESSAGE VARCHAR2 DEFAULT NULL);   PROCEDURE INFO(p_proc_name varchar2, title varchar2, content clob);   PROCEDURE DEBUG(p_proc_name varchar2, title varchar2, content clob);              PROCEDURE ERROR(p_proc_name varchar2, title varchar2, content clob); END LOGUTILS;

body CREATE OR REPLACE PACKAGE BODY LOGUTILS IS

 --日志  PROCEDURE LOG(P_TASK_ID    VARCHAR2,         P_TASK_CODE  VARCHAR2,         P_START_DATE  DATE DEFAULT NULL,         P_END_DATE    DATE DEFAULT NULL,         P_LOG_STATUS  VARCHAR2 DEFAULT NULL,         P_LOG_MESSAGE VARCHAR2 DEFAULT NULL) IS   PRAGMA AUTONOMOUS_TRANSACTION;   V_COUNT NUMBER;  BEGIN   SELECT COUNT(1)    INTO V_COUNT    FROM T_CEM_TASK_LOG T   WHERE T.TASK_ID = P_TASK_ID     AND T.TASK_CODE = P_TASK_CODE;   IF V_COUNT = 0 THEN    INSERT INTO T_CEM_TASK_LOG     (ID,     TASK_ID,     TASK_CODE,     START_DATE,     END_DATE,     LOG_STATUS,     LOG_MESSAGE,     CREATEDATE)    VALUES     (CEM_TASK_LOG_S.NEXTVAL,     P_TASK_ID,     P_TASK_CODE,     P_START_DATE,     P_END_DATE,     P_LOG_STATUS,     P_LOG_MESSAGE,     SYSDATE);   ELSE    UPDATE T_CEM_TASK_LOG     SET END_DATE    = P_END_DATE,       LOG_STATUS  = P_LOG_STATUS,       LOG_MESSAGE = P_LOG_MESSAGE     WHERE TASK_ID = P_TASK_ID     AND TASK_CODE = P_TASK_CODE;   END IF;   COMMIT;  END LOG;   /*记录消息*/   PROCEDURE INFO(p_proc_name varchar2, title varchar2, content clob) is     PRAGMA AUTONOMOUS_TRANSACTION;   begin     INSERT INTO t_cem_proc_logs(id,proc_mc,title,content, log_type,log_time)     VALUES ('LOG'||to_char(sysdate,'YYYYMMDD')||lpad(SEQ_log.NEXTVAL,8,'0'), upper(p_proc_name), substr(title,1,4000), content, 'INFO',sysdate);     COMMIT;   EXCEPTION WHEN OTHERS THEN NULL;   ROLLBACK;   END;   /*记录测试*/   PROCEDURE DEBUG(p_proc_name varchar2, title varchar2, content clob) is     PRAGMA AUTONOMOUS_TRANSACTION;   begin     INSERT INTO t_cem_proc_logs(id,proc_mc,title,content, log_type,log_time)     VALUES ('LOG'||to_char(sysdate,'YYYYMMDD')||lpad(SEQ_log.NEXTVAL,8,'0'), upper(p_proc_name), substr(title,1,4000), content, 'DEBUG',sysdate);     COMMIT;   EXCEPTION WHEN OTHERS THEN NULL;   ROLLBACK;   END;   /*记录错误*/   PROCEDURE ERROR(p_proc_name varchar2, title varchar2, content clob) is     PRAGMA AUTONOMOUS_TRANSACTION;   begin     INSERT INTO t_cem_proc_logs(id,proc_mc,title,content, log_type,log_time)     VALUES ('LOG'||to_char(sysdate,'YYYYMMDD')||lpad(SEQ_log.NEXTVAL,8,'0'), upper(p_proc_name), substr(title,1,4000), content, 'ERROR',sysdate);     COMMIT;   EXCEPTION WHEN OTHERS THEN NULL;   ROLLBACK;   END; END LOGUTILS;

0 人点赞