SQL> column time format a25
SQL> call STOPWATCH.START_TIME();
SQL> selectcount(*) from all_catalog;
..(結果省略)
SQL> select STOPWATCH.TO_TIME(STOPWATCH.SPLIT_TIME,'経過時間:') time from dual;
TIME
-------------------------
経過時間:00:00:00.08
SQL> set serveroutput on
SQL> call dbms_lock.sleep(60.123);
SQL> call dbms_output.put_line(STOPWATCH.TO_TIME(STOPWATCH.STOP_TIME,'合計時間:'));
合計時間:00:01:00.20
時間計測パッケージ・パッケージ本体 ソースコード
パッケージ定義部
CREATE OR REPLACE PACKAGE RIVUS.STOPWATCH
IS
FUNCTION TO_TIME(P_HSEC IN NUMBER, P_CAPTION IN VARCHAR2 := '')
RETURN VARCHAR2;
--
PROCEDURE START_TIME;
--
FUNCTION SPLIT_TIME
RETURN NUMBER;
--
FUNCTION STOP_TIME
RETURN NUMBER;
END;
/
パッケージ本体
CREATE OR REPLACE PACKAGE BODY RIVUS.STOPWATCH
IS
gStartTimeMemory NUMBER;
FUNCTION TO_TIME(P_HSEC IN NUMBER, P_CAPTION IN VARCHAR2 := '')
RETURN VARCHAR2
IS
vMesg VARCHAR2(2000);
vDatetime DATE;
BEGIN
IF (P_HSEC IS NULL) THEN
vMesg := 'START されていません';
ELSE
vDatetime := TO_DATE('2000', 'YYYY') + P_HSEC / 24 / 60 / 60 / 100;
vMesg := P_CAPTION || TO_CHAR(vDatetime, 'HH24:MI:SS.');
vMesg := vMesg || TO_CHAR(MOD(P_HSEC, 100), 'FM00');
END IF;
RETURN vMesg;
END;
--
PROCEDURE START_TIME
IS BEGIN
gStartTimeMemory := DBMS_UTILITY.GET_TIME;
END;
--
FUNCTION SPLIT_TIME
RETURN NUMBER IS
BEGIN
RETURN DBMS_UTILITY.GET_TIME - gStartTimeMemory;
END;
FUNCTION STOP_TIME
RETURN NUMBER IS
vSec NUMBER;
BEGIN
vSec := DBMS_UTILITY.GET_TIME - gStartTimeMemory;
gStartTimeMemory := NULL;
RETURN vSec;
END;
END;
/