我有一个每小时运行一次的过程,用于填充一个表格。由该过程处理的记录很多,因此每次执行大约需要12~17分钟。 您是否知道是否有一种方法(例如触发器)可以记录每次执行的持续时间(即记录到表格中)?
我有一个每小时运行一次的过程,用于填充一个表格。由该过程处理的记录很多,因此每次执行大约需要12~17分钟。 您是否知道是否有一种方法(例如触发器)可以记录每次执行的持续时间(即记录到表格中)?
我不知道是否有触发器可以自动完成这个任务。一种方法是:
PROCEDURE MY_PROC IS
tsStart TIMESTAMP;
tsEnd TIMESTAMP;
BEGIN
tsStart := SYSTIMESTAMP;
-- 'real' code here
tsEnd := SYSTIMESTAMP;
INSERT INTO PROC_RUNTIMES (PROC_NAME, START_TIME, END_TIME)
VALUES ('MY_PROC', tsStart, tsEnd);
END MY_PROC;
我通常使用带有日期或时间戳列的日志表,其默认值为sysdate / systimestamp。然后,我调用一个自主过程,在我关心的某些地方(开始/结束过程调用,提交后等)进行日志插入:
请参见这里(查找我的回答)。
如果您要插入数百万行,则可以控制何时(多久)将其插入日志表。再次,请参见我的示例。
除了第一个答案,一旦你有开始和结束时间戳,你可以使用此函数将它们转换为毫秒数。这有助于可读性,如果没有其他作用。
function timestamp_diff(
start_time_in timestamp,
end_time_in timestamp) return number
as
l_days number;
l_hours number;
l_minutes number;
l_seconds number;
l_milliseconds number;
begin
select extract(day from end_time_in-start_time_in)
, extract(hour from end_time_in-start_time_in)
, extract(minute from end_time_in-start_time_in)
, extract(second from end_time_in-start_time_in)
into l_days, l_hours, l_minutes, l_seconds
from dual;
l_milliseconds := l_seconds*1000 + l_minutes*60*1000
+ l_hours*60*60*1000 + l_days*24*60*60*1000;
return l_milliseconds;
end;
DBMS_UTILITY.GET_TIME
,对吧 @BobJarvis - Sathyajith Bhat