在 oracle 中加载包含包的开始日期、结束日期和处理进度的日志表



我有一个按名称命名的表AN_REMEDIATION_MATRIX通过 plsql 包加载。

我有一个具有以下结构的日志表MD_RUNS_STEP:

STEP_ID       NOT NULL NUMBER        
RUN_TYPE               VARCHAR2(10)  
RUN_START              DATE          
RUN_END                DATE          
RUN_SUCCESS            NUMBER        
USERNAME               VARCHAR2(30)  
RUN_ID        NOT NULL NUMBER        
RUN_ROLLBACK           NUMBER        
STEP_ID_PREV           NUMBER        
SYSID                  VARCHAR2(9)   
PROGRESS               VARCHAR2(500) 
STAT_RECS              NUMBER        
STAT_CPU               NUMBER        
STAT_TIME              NUMBER        
STAT_SEQ_READ          NUMBER        
STAT_SCT_READ          NUMBER

现在,我需要在执行包时使用上述值加载此日志表。
如何做到这一点?任何人都可以帮助我,我不知道它是如何工作的,因为我是甲骨文的新手。

期待回复。

谢谢

没有 Oracle 自动填充此日志表的特定方法/设置。由于它特定于您的应用程序,因此一旦您了解了这些列的含义,您就可以向 pl/sql 过程添加代码以根据需要获取日志。有些列很简单,这通常是代码的外观。

假设您当前的程序当前看起来像这样。

create or replace procedure p_INS_AN_REMEDIATION_MATRIX
as
BEGIN
  insert into p_INS_AN_REMEDIATION_MATRIX(.....) values (.....);
  update p_INS_AN_REMEDIATION_MATRIX set... where ...;
  commit;
END;
/

让我们来看看一些日志列。.(STEP_ID、RUN_START、RUN_END、RUN_SUCCESS)。更改后,您的代码将如下所示

create or replace procedure p_INS_AN_REMEDIATION_MATRIX
as
  procedure add_new_log (i_step_id) is
    pragma autonomous_transaction;
  begin
    insert into MD_RUNS_STEP (i_step_id, run_start) 
        values (i_step_id, sysdate);
     commit;
  end;
  procedure update_status (i_step_id, i_status) 
  .....
  end;
  v_step_id number;
BEGIN
  select run_step_id_seq.nextval into v_step_id from dual;
  add_new_log(v_step_id);
  insert into p_INS_AN_REMEDIATION_MATRIX(.....) values (.....);
  update p_INS_AN_REMEDIATION_MATRIX set... where ...;
  commit;
  update_status(i_step_id,'SUCCESS'); --will set the load finish time as well.
EXCEPTION
  WHEN OTHERS THEN
     update_status(i_step_id,'FAILURE');  
     --RAISE, SEND ERROR EMAIL Based on your logic.
END;
/

正如@DCookie指出的(+1),自治事务是这样的日志记录的完美用例。您的主事务不受影响,您可以随时查看运行的最新状态。

通常,你可能有执行所有这些更新的现有包,你可能只需要调用这些 API。四处询问或查看当前正在运行的负载之一。

是否需要在执行包时定期插入此表,并且需要能够查看另一个会话的进度?

如果是这样,您可以查看PRAGMA AUTONOMOUS_TRANSACTION声明。将 insert 语句放入用 PRAGMA 定义的函数中,您可以独立于包提交插入。根据需要在包中调用函数。

最新更新