Oracle запрос с использованием оператора мод - PullRequest
0 голосов
/ 24 октября 2018

У меня есть пакет Spring, который пытается загружать ожидающие документы на сервер каждые 5 минут из таблицы ниже.В настоящее время после 5 неудачных попыток загрузить файл пакет помечает запись как неудачную и отправляет уведомление по электронной почте.Я пытаюсь улучшить этот пакет, чтобы попытаться загрузить еще 2 раза с перерывом в 6 часов после 5 попыток.то есть, пока FAIL_CTR не достигнет 5, запись будет загружаться каждые 5 минут.Как только FAIL_CTR достигнет 5, запись будет загружаться каждые 6 часов.

Вот что я пытался сделать для запроса, который выбирает подходящие записи для пакета для загрузки.Проблема в том, что для записи, которая уже 5 раз не удалась, на 6-м часе партия будет пытаться загружаться каждые 5 минут.Мне просто нужно сделать это один раз через 6 часов после 5-й попытки и один раз через 6 часов после 6-й попытки.Как мне этого добиться?

select * from SUPPORT_DOCS DOCS   
        where (DOCS.FAIL_CTR < 5  OR (DOCS.FAIL_CTR < 7 AND floor(mod(24*(SYSDATE-DOCS.LAST_ATTEMPTED_DATE),6))=0))
        and DOCS.STATUS='F';

Table

1 Ответ

0 голосов
/ 24 октября 2018

Я думаю, что логика будет:

 Select * from SUPPORT_DOCS DOCS   
    where (
      (DOCS.FAIL_CTR < 5  OR 
      (DOCS.FAIL_CTR = 5 AND SYSDATE-DOCS.LAST_ATTEMPTED_DATE > 0.25) OR 
      (DOCS.FAIL_CTR = 6 AND SYSDATE-DOCS.LAST_ATTEMPTED_DATE > 0.5)
    )
    and DOCS.STATUS='F';

date1 - date2 в oracle дает результат в днях, так что вы хотите задержку на четверть дня перед повторной попыткой, затем полдня.Я предполагаю, что при повторной попытке надежно обновляется дата последней попытки и увеличивается счетчик сбоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...