PKG_IPLAN_LOG

create or replace package PKG_IPLAN_LOG is

  -- Author  : PSM-B506000000000000
  -- Created : 2021/2/4 9:04:57
  -- Purpose : 日志包
  
  PROCEDURE write_task_log(i_module_name IN VARCHAR2,
                           i_task_name   IN VARCHAR2,
                           i_status      IN VARCHAR2,
                           i_msg         IN VARCHAR2 DEFAULT NULL,
                           i_oflow_id    IN VARCHAR2 DEFAULT NULL,
                           i_oflow_name  IN VARCHAR2 DEFAULT NULL,
                           i_row_count   IN NUMBER DEFAULT NULL,
                           i_sql_text    IN VARCHAR2 DEFAULT NULL,
                           i_get_sql_id  IN VARCHAR2 DEFAULT 'N');
  
  PROCEDURE write_task_log_once(i_module_name IN VARCHAR2,
                                i_task_name   IN VARCHAR2,
                                i_msg         IN VARCHAR2,
                                i_oflow_id    IN VARCHAR2 DEFAULT NULL,
                                i_oflow_name  IN VARCHAR2 DEFAULT NULL,
                                i_sql_text    IN VARCHAR2 DEFAULT NULL,
                                i_status      IN VARCHAR2 DEFAULT 'Ok');

END pkg_iplan_log;


create or replace package body PKG_IPLAN_LOG is
  
  TYPE type_session IS RECORD(
    session_id NUMBER,
    serial#    NUMBER,
    user_name  VARCHAR2(100));

  TYPE type_task_log IS RECORD(
    log_id     NUMBER,
    start_time NUMBER);

  TYPE type_tb_task_log IS TABLE OF type_task_log INDEX BY VARCHAR2(1000);

  gv_session  type_session;
  gv_task_log type_tb_task_log;

  PROCEDURE p_get_session_info IS
    v_session_id NUMBER;
    v_serial#    NUMBER;
  BEGIN
    --获取会话信息
    v_session_id := gv_session.session_id;
    IF v_session_id IS NULL THEN
      SELECT t.sid, t.serial#
        INTO v_session_id, v_serial#
        FROM sys.v_$session t
       WHERE t.sid IN (SELECT t2.sid FROM sys.v_$mystat t2 WHERE rownum < 2);
    
      gv_session.session_id := v_session_id;
      gv_session.serial#    := v_serial#;
    END IF;
  END;

  PROCEDURE p_write_task_log(i_module_name IN VARCHAR2,
                             i_task_name   IN VARCHAR2,
                             i_status      IN VARCHAR2,
                             i_msg         IN VARCHAR2,
                             i_oflow_id    IN VARCHAR2 DEFAULT NULL,
                             i_oflow_name  IN VARCHAR2 DEFAULT NULL,
                             i_row_count   IN NUMBER DEFAULT NULL,
                             i_sql_text    IN VARCHAR2 DEFAULT NULL,
                             i_get_sql_id  IN VARCHAR2 DEFAULT 'N') IS
    PRAGMA AUTONOMOUS_TRANSACTION;
  
    v_session_id NUMBER;
    v_serial#    NUMBER;
  
    v_iplan_task_run_log iplan_task_run_log%ROWTYPE;
  
  BEGIN
    p_get_session_info;
    v_session_id := gv_session.session_id;
    v_serial#    := gv_session.serial#;
  
    IF i_status = 'Start' THEN
      v_iplan_task_run_log.log_id      := seq_iplan_task_run_log.nextval;
      v_iplan_task_run_log.module_name := i_module_name;
      v_iplan_task_run_log.task_name   := i_task_name;
      v_iplan_task_run_log.start_date  := SYSDATE;
      v_iplan_task_run_log.status      := 'Running';
      v_iplan_task_run_log.oflow_id    := i_oflow_id;
      v_iplan_task_run_log.oflow_name  := i_oflow_name;
      v_iplan_task_run_log.sql_text    := i_sql_text;
      v_iplan_task_run_log.session_id  := v_session_id;
      v_iplan_task_run_log.serial#     := v_serial#;
    
      gv_task_log(i_module_name || i_task_name).log_id := v_iplan_task_run_log.log_id;
      gv_task_log(i_module_name || i_task_name).start_time := dbms_utility.get_time;
    
      INSERT INTO iplan_task_run_log VALUES v_iplan_task_run_log;
    ELSIF i_status = 'End' THEN
      v_iplan_task_run_log.log_id      := gv_task_log(i_module_name || i_task_name)
                                       .log_id;
      v_iplan_task_run_log.elapse_time := dbms_utility.get_time - gv_task_log(i_module_name || i_task_name)
                                      .start_time;
      v_iplan_task_run_log.end_date    := SYSDATE;
      v_iplan_task_run_log.status      := 'Ok';
      v_iplan_task_run_log.row_count   := i_row_count;
      v_iplan_task_run_log.msg         := i_msg;
    
      IF i_get_sql_id = 'Y' THEN
        SELECT t.prev_sql_id
          INTO v_iplan_task_run_log.sql_id
          FROM sys.v_$session t
         WHERE t.sid = gv_session.session_id
           AND rownum < 2;
      END IF;
    
      UPDATE iplan_task_run_log t
         SET t.end_date    = v_iplan_task_run_log.end_date,
             t.elapse_time = v_iplan_task_run_log.elapse_time,
             t.status      = v_iplan_task_run_log.status,
             t.row_count   = v_iplan_task_run_log.row_count,
             t.msg         = v_iplan_task_run_log.msg,
             t.sql_id      = v_iplan_task_run_log.sql_id
       WHERE t.log_id = v_iplan_task_run_log.log_id;
    ELSIF i_status = 'Failed' THEN
      v_iplan_task_run_log.log_id      := gv_task_log(i_module_name || i_task_name)
                                       .log_id;
      v_iplan_task_run_log.elapse_time := dbms_utility.get_time - gv_task_log(i_module_name || i_task_name)
                                      .start_time;
      v_iplan_task_run_log.end_date    := SYSDATE;
      v_iplan_task_run_log.status      := 'Failed';
      v_iplan_task_run_log.msg         := i_msg;
    
      UPDATE iplan_task_run_log t
         SET t.end_date    = v_iplan_task_run_log.end_date,
             t.elapse_time = v_iplan_task_run_log.elapse_time,
             t.status      = v_iplan_task_run_log.status,
             t.msg         = v_iplan_task_run_log.msg
       WHERE t.log_id = v_iplan_task_run_log.log_id;
    END IF;
  
    COMMIT;
  
  END;

  PROCEDURE p_write_task_log_once(i_module_name IN VARCHAR2,
                                  i_task_name   IN VARCHAR2,
                                  i_msg         IN VARCHAR2,
                                  i_oflow_id    IN VARCHAR2 DEFAULT NULL,
                                  i_oflow_name  IN VARCHAR2 DEFAULT NULL,
                                  i_sql_text    IN VARCHAR2 DEFAULT NULL,
                                  i_status      IN VARCHAR2) IS
    PRAGMA AUTONOMOUS_TRANSACTION;
  
    v_session_id NUMBER;
    v_serial#    NUMBER;
  
    v_iplan_task_run_log iplan_task_run_log%ROWTYPE;
  BEGIN
    p_get_session_info;
    v_session_id := gv_session.session_id;
    v_serial#    := gv_session.serial#;
  
    v_iplan_task_run_log.log_id      := seq_iplan_task_run_log.nextval;
    v_iplan_task_run_log.module_name := i_module_name;
    v_iplan_task_run_log.task_name   := i_task_name;
    v_iplan_task_run_log.start_date  := SYSDATE;
    v_iplan_task_run_log.end_date    := SYSDATE;
    v_iplan_task_run_log.status      := i_status;
    v_iplan_task_run_log.oflow_id    := i_oflow_id;
    v_iplan_task_run_log.oflow_name  := i_oflow_name;
    v_iplan_task_run_log.sql_text    := i_sql_text;
    v_iplan_task_run_log.msg         := i_msg;
    v_iplan_task_run_log.session_id  := v_session_id;
    v_iplan_task_run_log.serial#     := v_serial#;
  
    INSERT INTO iplan_task_run_log VALUES v_iplan_task_run_log;
  
    COMMIT;
  END;

  PROCEDURE write_task_log(i_module_name IN VARCHAR2,
                           i_task_name   IN VARCHAR2,
                           i_status      IN VARCHAR2,
                           i_msg         IN VARCHAR2 DEFAULT NULL,
                           i_oflow_id    IN VARCHAR2 DEFAULT NULL,
                           i_oflow_name  IN VARCHAR2 DEFAULT NULL,
                           i_row_count   IN NUMBER DEFAULT NULL,
                           i_sql_text    IN VARCHAR2 DEFAULT NULL,
                           i_get_sql_id  IN VARCHAR2 DEFAULT 'N') IS
  
  BEGIN
    p_write_task_log(i_module_name,
                     i_task_name,
                     i_status,
                     i_msg,
                     i_oflow_id,
                     i_oflow_name,
                     i_row_count,
                     i_sql_text,
                     i_get_sql_id);
  END;
  
  PROCEDURE write_task_log_once(i_module_name IN VARCHAR2,
                                i_task_name   IN VARCHAR2,
                                i_msg         IN VARCHAR2,
                                i_oflow_id    IN VARCHAR2 DEFAULT NULL,
                                i_oflow_name  IN VARCHAR2 DEFAULT NULL,
                                i_sql_text    IN VARCHAR2 DEFAULT NULL,
                                i_status      IN VARCHAR2 DEFAULT 'Ok') IS
  
  BEGIN
    p_write_task_log_once(i_module_name,
                          i_task_name,
                          i_msg,
                          i_oflow_id,
                          i_oflow_name,
                          i_sql_text,
                          i_status);
  END;
  
end PKG_IPLAN_LOG;


全部评论

相关推荐

吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务