Tenho um conjunto de consultas que preciso executar sucessivamente, levando o resultado da consulta anterior para a seguinte. Minha única necessidade é o tempo de execução da última consulta da lista, mas SET TIMING ON
me dá o tempo de execução de todo o bloco. Alguma ideia de como obter o tempo APENAS da última consulta? O problema é que não quero que as consultas anteriores interfiram no tempo que elas me fornecem. Exemplo abaixo:
set echo on;
set feedback on;
set timing on;
set serveroutput on;
declare
pid varchar(20);
aid varchar(20);
bob char(1);
begin
select st.some_id, st.person_id into aid, pid
from some_table st
join person p on st.person_id = p.person_id
where p.name not like '%bob%' and rownum = 1;
-- get timing of another query here
end;
Quando executo isso, ele me fornece o tempo total de execução do bloco de código:
Elapsed: 00:00:00.045
Salve
sysdate
ousystimestamp
em uma variável pl/sql logo antes da consulta e usedbms_output.put_line
para gerar a diferença posteriormente.Eu provavelmente faria o que você precisa fazer da maneira que Jack Douglas sugeriu. Mas se você realmente quiser ser sofisticado, pode consultar
elapsed_time
e dividir pelo número deexecution
s da consulta, para obter o tempo médio de execução de uma consulta.Com a seguinte função...
... você pode obter esses números assim: