Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос по хранимым процедурам / 5 сообщений из 5, страница 1 из 1
21.02.2019, 10:18
    #39777114
Unsocial
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по хранимым процедурам
Доброго времени суток. Заранее извиняюсь за глупый вопрос.
Суть такова: Есть некое приложение, которое добавляет в таблицу данные инсертами(примерный вид результата):
Data cnlnum val status 2019-02-20 13:29:45.678054 721 5 1 2019-02-20 13:29:45.678054 722 4 1 2019-02-20 13:29:45.678054 723 3 1 2019-02-20 13:29:45.678054 724 2 1 2019-02-20 13:29:45.689011 721 5 1 2019-02-20 13:29:45.689011 722 4 1 2019-02-20 13:29:45.689011 723 3 1 2019-02-20 13:29:45.689011 724 2 1 2019-02-20 13:29:46.182297 8001 1 1 2019-02-20 13:29:46.193291 8001 0 1 2019-02-20 13:30:45.697236 721 6 1 2019-02-20 13:30:45.697236 722 5 1 2019-02-20 13:30:45.697236 723 4 1 2019-02-20 13:30:45.697236 724 3 1 2019-02-20 13:30:45.708173 721 6 1 2019-02-20 13:30:45.708173 722 5 1 2019-02-20 13:30:45.708173 723 4 1 2019-02-20 13:30:45.708173 724 3 1 2019-02-20 13:30:46.225274 8001 0 1 2019-02-20 13:30:46.236325 8001 0 1

Мне необходимо после того, как значение канала 8001 изменилось на 1 прочитать следующие значения каналов 721-724 один раз и добавить их в отдельную таблицу. Так как я не могу повлиять на формат записи данных, то, как я понимаю, я могу это решить триггерами и хранимыми функциями, верно?(хотя уже склоняюсь к обработке этой таблицы данных по расписанию). Но я не совсем понимаю, как в функции, вызванной по триггеру, мне сформировать новый инсерт в другую таблицу, если нужных для этого данных на момент срабатывания триггера еще нет?(видно по таймштампам, что они приходят позже).
Буду рад любому указателю стороны, в которую стоит копать.

Триггер:
Код: plsql
1.
CREATE TRIGGER dispenser_trigger AFTER INSERT ON cnldata FOR EACH ROW WHEN (new.val = 1 AND new.cnlnum = 8001) EXECUTE PROCEDURE dispenser_procedure();
...
Рейтинг: 0 / 0
21.02.2019, 11:11
    #39777137
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по хранимым процедурам
Unsocial…
Мне необходимо после того, как значение канала 8001 изменилось на 1 прочитать следующие значения каналов 721-724 один раз и добавить их в отдельную таблицу. …
Что значит “следующие значения”? Покажите на примере ваших данных какие записи надо прочитать и добавить, какой должен быть результат в представленной и второй таблицах?
...
Рейтинг: 0 / 0
21.02.2019, 11:43
    #39777158
Unsocial
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по хранимым процедурам
vyegorovUnsocial…
Мне необходимо после того, как значение канала 8001 изменилось на 1 прочитать следующие значения каналов 721-724 один раз и добавить их в отдельную таблицу. …
Что значит “следующие значения”? Покажите на примере ваших данных какие записи надо прочитать и добавить, какой должен быть результат в представленной и второй таблицах?

Data cnlnum val status2019-02-20 13:29:45.678054 721 5 12019-02-20 13:29:45.678054 722 4 12019-02-20 13:29:45.678054 723 3 12019-02-20 13:29:45.678054 724 2 12019-02-20 13:29:45.689011 721 5 12019-02-20 13:29:45.689011 722 4 12019-02-20 13:29:45.689011 723 3 12019-02-20 13:29:45.689011 724 2 12019-02-20 13:29:46.182297 8001 1 12019-02-20 13:29:46.193291 8001 0 12019-02-20 13:30:45.697236 721 6 12019-02-20 13:30:45.697236 722 5 12019-02-20 13:30:45.697236 723 4 12019-02-20 13:30:45.697236 724 3 12019-02-20 13:30:45.708173 721 6 12019-02-20 13:30:45.708173 722 5 12019-02-20 13:30:45.708173 723 4 12019-02-20 13:30:45.708173 724 3 12019-02-20 13:30:46.225274 8001 0 12019-02-20 13:30:46.236325 8001 0 1

Зелёным отмечен триггер, оранжевым то, что нужно считать и добавить в таблицу вида:

val where cnlnum=721 val where cnlnum=722 val where cnlnum=723 val where cnlnum=7246 5 4 3
Исходную таблицу изменять не нужно.
...
Рейтинг: 0 / 0
21.02.2019, 13:55
    #39777265
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по хранимым процедурам
Unsocial,

Оранжевые записи в будущем по отношению к триггерной, в таком виде триггер не написать.

Тут скорее надо делать так: когда вставляется запись выключающая триггер, смотреть что там было с момента включения и регистрировать. Вопрос в том — как не сделать дубликаты, т.к. у вас там несколько “выключающих” записей.
...
Рейтинг: 0 / 0
21.02.2019, 15:35
    #39777378
Hawkmoon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по хранимым процедурам
Человеку нужно:

а) запомнить дату у триггерной записи
Дату. кхм. с точностью до микросекунд, лол

Обзовем ее d0

б) выбрать val из записей где cnlnum = 721 и время = (выбрать минимальное время для канала 721 где время > d0)
в) аналогично для 722
Г) 723
д) 724

е) отпивотить результат в четыре столбца.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос по хранимым процедурам / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]