Self-Contained Block
DECLARE
l_start TIMESTAMP;
PROCEDURE start_timer
IS
BEGIN
l_start := SYSTIMESTAMP;
END start_timer;
PROCEDURE show_elapsed_time ( message_in IN VARCHAR2 )
IS
BEGIN
DBMS_OUTPUT.put_line (
CASE
WHEN message_in IS NULL THEN 'Completed in:'
ELSE '"' || message_in || '" completed in: '
END
|| REGEXP_SUBSTR (SYSTIMESTAMP - l_start,
'([1-9][0-9:]*|0)\.\d{3}')
|| ' seconds');
/* Reset timer */
start_timer;
END show_elapsed_time;
BEGIN
start_timer;
-- Put your code here
show_elapsed_time ( 'DESCRIPTION' );
END;
"DESCRIPTION" completed in: 6:59:59.999 seconds
CREATE OR REPLACE PACKAGE plsql_timer
IS
PROCEDURE start_timer;
PROCEDURE show_elapsed_time (message_in IN VARCHAR2 := NULL);
END plsql_timer;
Package created.
CREATE OR REPLACE PACKAGE BODY plsql_timer
IS
last_timing TIMESTAMP;
PROCEDURE start_timer
IS
BEGIN
last_timing := SYSTIMESTAMP;
END;
PROCEDURE show_elapsed_time (message_in IN VARCHAR2 := NULL)
IS
BEGIN
DBMS_OUTPUT.put_line (
CASE
WHEN message_in IS NULL THEN 'Completed in:'
ELSE '"' || message_in || '" completed in: '
END
|| REGEXP_SUBSTR (SYSTIMESTAMP - last_timing,
'([1-9][0-9:]*|0)\.\d{3}')
|| ' seconds');
/* Reset timer */
start_timer;
END;
END plsql_timer;
Package Body created.
DECLARE
c_counter CONSTANT PLS_INTEGER := 1000;
BEGIN
plsql_timer.start_timer;
/* Put your code here. Usually you will want to run that code in a loop,
since a single execution doesn't offer stabilized, accurate results. */
FOR indx IN 1 .. c_counter
LOOP
-- Your code here!
NULL;
END LOOP;
plsql_timer.show_elapsed_time ( 'DESCRIPTION' );
END;
"DESCRIPTION" completed in: 6:59:59.999 seconds