У меня следующий запрос, но у меня есть небольшая проблема
...
trunc(to_char(to_date(elapsed_time,'hh24:mi:ss'),'sssss')/EXECUTIONS,2)
ERROR at line 2:
ORA-01850: hour must be between 0 and 23
...
Это происходит потому, что elapsed_time представляет собой сумму всех запросов, а значение превышает 24 ч.
Как Могу ли я разделить значение?
Если вам нужно, вот два запроса, один для всех elapsed_time, а другой - запрос с проблемой, запрос с проблемой - это запрос, который получает среднее значение при выполнении
--TOP QUERIES COM MAIOR ELAPSED_TIME
set pagesize 0 embedded on;
set linesize 3000;
col FIRST_LOAD_TIME for a20;
col LAST_LOAD_TIME for a20;
col EXECUTIONS for a10;
COL sql_id for a20;
col FETCHES for a10;
col PARSE_CALLS for a15;
col elapsed_time for a20;
SELECT * FROM
(SELECT
sql_id,
TO_CHAR(TRUNC((elapsed_time/1000000)/3600),'FM9900') || ':' ||
TO_CHAR(TRUNC(MOD((elapsed_time/1000000),3600)/60),'FM00') || ':' ||
TO_CHAR(MOD((elapsed_time/1000000),60),'FM00') AS elapsed_time, --ESSE CAMPO É A SOMA DE TODO O TEMPO DE ESPERA, NAO DE APENAS UMA EXECUCAO
child_number,
disk_reads,
to_char(executions) as executions,
to_char(FETCHES) as FETCHES,
to_char(PARSE_CALLS) as PARSE_CALLS,
first_load_time,
last_load_time
FROM gv$sql
ORDER BY elapsed_time DESC)
WHERE ROWNUM < 10 ---top 10
/
Запрос, который я хочу построить по среднему времени:
--MEDIA ELAPSED_TIME POR EXECUCAO
set pagesize 0 embedded on;
set linesize 3000;
col FIRST_LOAD_TIME for a20;
col LAST_LOAD_TIME for a20;
col EXECUTIONS for a10;
COL sql_id for a20;
col FETCHES for a10;
col PARSE_CALLS for a15;
col TOTAL_ELAPSED_TIME_SECS for a40;
SELECT sql_id,elapsed_time,to_char(to_date(elapsed_time,'hh24:mi:ss'),'sssss') "TOTAL_ELAPSED_TIME_SECS",
EXECUTIONS,trunc(to_char(to_date(elapsed_time,'hh24:mi:ss'),'sssss')/EXECUTIONS,2) "AVG_TIME_BY_EXECUTION_SEC" FROM
(SELECT
sql_id,
TO_CHAR(TRUNC((elapsed_time/1000000)/3600),'FM9900') || ':' ||
TO_CHAR(TRUNC(MOD((elapsed_time/1000000),3600)/60),'FM00') || ':' ||
TO_CHAR(MOD((elapsed_time/1000000),60),'FM00') AS elapsed_time, --ESSE CAMPO É A SOMA DE TODO O TEMPO DE ESPERA, NAO DE APENAS UMA EXECUCAO
to_char(EXECUTIONS) as EXECUTIONS
FROM gv$sql
ORDER BY elapsed_time DESC)
WHERE ROWNUM < 10 ---top 10
/
Примечание: Если возможно, я бы хотел, чтобы среднее время в часах а не секунды, как в приведенном выше запросе.