русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Написать запрос о том, какой процесс в какое время начинался, в какое время заканчивался и сколько секунд работал.


Дата добавления: 2015-08-31; просмотров: 660; Нарушение авторских прав


 

Создадим таблицу и заполним ее данными посложнее:

create table kk_log (id number, lc_date date, lc_message varchar2(200));

insert into kk_log (id,lc_date,lc_message) values (1,to_date('27.06.2012 0:55:47','dd.mm.yyyy hh24:mi:ss'), 'start Pump_Pers_PercStav2');

insert into kk_log (id,lc_date,lc_message) values (2,to_date('27.06.2012 1:56:00','dd.mm.yyyy hh24:mi:ss'), 'start Fill_depfis_pays');

insert into kk_log (id,lc_date,lc_message) values (3,to_date('27.06.2012 1:56:12','dd.mm.yyyy hh24:mi:ss'), 'finish Pump_Pers_PercStav2');

insert into kk_log (id,lc_date,lc_message) values (4,to_date('27.06.2012 1:56:28','dd.mm.yyyy hh24:mi:ss'), 'finish Fill_depfis_pays');

insert into kk_log (id,lc_date,lc_message) values (5,to_date('27.06.2012 8:06:39','dd.mm.yyyy hh24:mi:ss'), 'start Failing_process_which_not_finishes');

insert into kk_log (id,lc_date,lc_message) values (6,to_date('27.06.2012 9:02:33','dd.mm.yyyy hh24:mi:ss'), 'start Pump_Prep_PersLim');

insert into kk_log (id,lc_date,lc_message) values (7,to_date('27.06.2012 9:03:44','dd.mm.yyyy hh24:mi:ss'), 'start Fill_depfis_pays');

insert into kk_log (id,lc_date,lc_message) values (8,to_date('27.06.2012 9:04:07','dd.mm.yyyy hh24:mi:ss'), 'finish Fill_depfis_pays');

insert into kk_log (id,lc_date,lc_message) values (9,to_date('27.06.2012 9:04:07','dd.mm.yyyy hh24:mi:ss'), 'start Fill_depfis_pays');

insert into kk_log (id,lc_date,lc_message) values (10,to_date('27.06.2012 9:04:07','dd.mm.yyyy hh24:mi:ss'), 'finish Fill_depfis_pays');

insert into kk_log (id,lc_date,lc_message) values (11,to_date('27.06.2012 9:04:07','dd.mm.yyyy hh24:mi:ss'), 'start Pump_Pers_PercStav2');

insert into kk_log (id,lc_date,lc_message) values (12,to_date('27.06.2012 9:06:19','dd.mm.yyyy hh24:mi:ss'), 'finish Pump_Prep_PersLim');



insert into kk_log (id,lc_date,lc_message) values (13,to_date('27.06.2012 9:56:16','dd.mm.yyyy hh24:mi:ss'), 'start Failing_process_which_not_finishes');

insert into kk_log (id,lc_date,lc_message) values (14,to_date('27.06.2012 10:11:54','dd.mm.yyyy hh24:mi:ss'), 'finish Pump_Pers_PercStav2');

insert into kk_log (id,lc_date,lc_message) values (15,to_date('27.06.2012 11:08:41','dd.mm.yyyy hh24:mi:ss'), 'start Pump_cats');

 

Запросом нужно получить такой результат:

PROC_NAME START_DATE FINISH_DATE RUN_TIME_IN_SECONDS
Pump_Pers_PercStav2 27.06.2012 0:55:47 27.06.2012 1:56:12
Fill_depfis_pays 27.06.2012 1:56:00 27.06.2012 1:56:28
Failing_process_which_not_finishes 27.06.2012 8:06:39    
Pump_Prep_PersLim 27.06.2012 9:02:33 27.06.2012 9:06:19
Fill_depfis_pays 27.06.2012 9:03:44 27.06.2012 9:04:07
Fill_depfis_pays 27.06.2012 9:04:07 27.06.2012 9:04:07
Pump_Pers_PercStav2 27.06.2012 9:04:07 27.06.2012 10:11:54
Failing_process_which_not_finishes 27.06.2012 9:56:16    
Pump_cats 27.06.2012 11:08:41    

 

В подзапросе q1 вычленим из лога название процесса и индикатор начала или окончания процесса (0 или 1 соответственно).

В подзапросе q2 с помощью функции lead найдем для каждой записи о процессе следующую запись, сортируя данные по id. Здесь же вычисляем lead_indicator, чтобы особо учесть случаи, когда после start идет не finish, а снова start (например, потому, что процесс не завершился успешно и был запущен повторно).

Наконец, во внешнем запросе отсечем записи по условию indicator = 0 и вычислим время выполнения каждого процесса в секундах:

select proc_name,

start_date,

decode(lead_indicator, 1, finish_date, null) finish_date,

(decode(lead_indicator, 1, finish_date, null) - start_date) * 60 * 60 * 24 run_time_in_seconds

from (select id,

lc_date start_date,

lead(lc_date) over(partition by proc_name order by id) finish_date,

proc_name,

indicator,

lead(indicator) over(partition by proc_name order by id) lead_indicator

from (select id,

lc_date,

trim(substr(lc_message, 7)) proc_name,

decode(substr(lc_message, 1, 6),

'start ',

0,

'finish',

1) indicator

from kk_log) q1) q2

where indicator = 0

order by start_date, finish_date;



<== предыдущая лекция | следующая лекция ==>
Задача. Пакет функций о вкладах. | Задача. Вьюшка с аналитическими функциями по вкладам.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.515 сек.