如何在包中添加审计表来捕获oracle中的计时


  1. 创建包
  2. 内部包创建2个过程和2个函数
  3. 现在添加audit以捕获中每个过程和函数的开始时间和结束时间审计表
  4. TBL_AUDIT_LOG(进程名称、开始时间、结束时间、创建者、创建者dttm(

尽管可以使用动态SQL(请参阅execute immediate(在包(实际上是其过程(中创建表,但不应该这样做。这是一种糟糕的做法。只需将SQL级别的表创建为

create table TBL_AUDIT_LOG
(process_name   varchar2(60),
start_time     date,
end_time       date,
created_by     varchar2(30),
created_dttm   date);

并在包装内使用。我建议您不要直接从包中的每个程序单元插入到表中——创建另一个日志记录过程,它将接受某些参数并执行日志记录本身,可能是作为一个自主事务。类似这样的东西:

procedure p_log (par_proc_name in varchar2, par_start in date, par_end in date) as
begin
insert into tbl_audit_log (process_name, start_time, end_time, created_by, created_dttm)
values (par_proc_name, par_start, par_end, user, sysdate);
commit;
end;

我会创建一个日志记录过程:

PROCEDURE INSERT_LOG(P_FROM IN VARCHAR2,
P_START_DATE   IN DATE,
P_END_DATE   IN DATE) IS  
BEGIN
INSERT INTO TBL_AUDIT_LOG VALUES (P_FROM , P_START_DATE, P_START_DATE,USER, NULL);
COMMIT;
END;

不是:我不确定created_dttm是什么,所以我传递了null。

在你的程序中,你可以这样使用它:

PROCEDURE TEST_P(P_VAR IN NUMBER) IS
C_LOG_START DATE;
C_LOG_END DATE;
BEGIN

C_LOG_START := SYSDATE ;  
/*
YOUR PROC LOGİC
*/
C_LOG_END := SYSDATE ;
-- CALL LOG ROC HERE 
INSERT_LOG('TEST_P',C_LOG_START,C_LOG_END,NULL);
END;

它的smiliar有函数,但你必须这样声明你的函数:

FUNCTION GET_CUSTOMER(REFNO VARCHAR2) RETURN TBL_CUSTOMER_PROFILE IS
PRAGMA AUTONOMOUS_TRANSACTION;
IS_NODATA BOOLEAN;
LORESULT  TBL_CUSTOMER_PROFILE;
BEGIN
/*function logic*/
END;

检查这里,这是非常重要的:

最新更新