konto usunięte
Temat: Oracle - pomiar czasu wykonania procedury w ms
WitamMam następujący problem z Oracle. Potrzebuje zmierzyć czas wykonania w ms procedury o nazwie SELECTQUERY. Wykorzystuje do tego inna procedurę o nazwie TIMEEXECUTION. Poniżej zamieszczam ich kody:
*****************************************************************
create or replace PROCEDURE TIMEEXECUTION
( nazwaprocedury IN VARCHAR2
, wynik OUT NUMBER) AS
strt timestamp;
stp timestamp;
BEGIN
SELECT systimestamp INTO strt FROM dual;
EXECUTE IMMEDIATE 'BEGIN ' || nazwaprocedury || '; END;';
SELECT systimestamp INTO stp FROM dual;
wynik := (to_number(to_char(stp,'hh24')) * 3600000000 + to_number(to_char(stp,'MI')) * 60000 + to_number(to_char(stp,'SS')) * 1000 + to_number(substr(to_char(stp,'FF'),1,3)))
- (to_number(to_char(strt,'hh24')) * 3600000000 + to_number(to_char(strt,'MI')) * 60000 + to_number(to_char(strt,'SS')) * 1000 + to_number(substr(to_char(strt,'FF'),1,3)));
END TIMEEXECUTION;
****************************************************************
create or replace
PROCEDURE SELECTQUERY AS
BEGIN
EXECUTE IMMEDIATE 'SELECT * FROM EKSPERYMENTWARTOSC';
END SELECTQUERY;
*****************************************************************
Problem polega na tym, iż czas wykonania procedury SELECTQUERY zmierzony przez TIMEEXECUTION wynosi 0. Oracle tak jakby nie wykonywał w ogóle polecenia EXECUTE IMMEDIATE 'SELECT * FROM EKSPERYMENTWARTOSC'; z procedury SELECTQUERY. Dla innych procedur, w których wykonywane są inne polecenia (insert, update, select into itd.) czas wykonania jest > 0 i jest poprawnie mierzony.
Proponowany model mierzenia czasu wykonania SELECTA poprzez procedure SELECTQUERY zastosowałem w 3 innych DBMS (MS SQL, MySQL oraz PostgreSQL) i problem tam taki nie występuje. Selecty w procedurze są wykonywane (czas wykonania polecenia >> 0).
Czy ma ktoś jakiś pomysł jak to obejść ? Potrzebuje zwrócić czas wykonania selecta (SELECT * FROM EKSPERYMENTWARTOSC) z poziomu bazy ORACLE do programu w C#.
Dziękuje i pozdrawiam
TW