1

这是场景。我有 N 个过程,每个都有不同的输入参数,我希望每个过程的执行时间存储在 xyz 表中。

CREATE OR REPLACE PROCEDURE PROC_TIME_CAPTURE IS

     before_procedure  timestamp;
     after_procedure timestamp;
     actual_time number;
     rpt_dt date;

BEGIN


select systimestamp into before_procedure from dual;
dbms_output.put_line (before_procedure );


proc_load('02/28/2013'); --- execution of procedure


select systimestamp into after_procedure from dual;
dbms_output.put_line (after_procedure);

select extract (second from (after_procedure-before_procedure)) into actual_time from dual;
dbms_output.put_line (actual_time);
END PROC_TIME_CAPTURE;

这就是我现在所做的。但我想让它动态化。insteag 在一次内部执行一个过程。我想将 proc_name 和 date 作为输入参数传递给主过程并执行它。

我是该站点的新手,因此请在发布此查询时忽略任何错误或格式问题。

请指导我这是否可以实现。

4

1 回答 1

0

您可以将所需的过程调用作为字符串传递,然后使用 EXECUTE IMMEDIATE 执行它。

CREATE OR REPLACE PROCEDURE PROC_TIME_CAPTURE( p_procedure_call VARCHAR2 )  IS

     before_procedure  timestamp;
     after_procedure timestamp;
     actual_time number;
     rpt_dt date;

BEGIN


select systimestamp into before_procedure from dual;
dbms_output.put_line (before_procedure );


EXECUTE IMMEDIATE p_procedure_call;


select systimestamp into after_procedure from dual;
dbms_output.put_line (after_procedure);

select extract (second from (after_procedure-before_procedure)) into actual_time from dual;
dbms_output.put_line (actual_time);
END PROC_TIME_CAPTURE;

您可以传递包括参数在内的完整过程调用。ETC...

BEGIN
  PROC_TIME_CAPTURE( 'proc_load( ''20/10/2010'' )' );
END;
于 2013-09-16T15:55:40.637 回答