|
Фиксирование результатов в таблицу в функции
|
|||
---|---|---|---|
#18+
Добрый день. Просьба помочь с архитектурой решения. Сейчас все сводится к тому, что функция должна зафиксировать данные в таблице, что очевидно невозможно. Есть таблица A (сущности) и таблица B (расчетные данные для каждой записи таблицы A, один ко многим). Расчет данных для таблицы B (для каждой записи A) может выполняться достаточно долго. Сейчас при изменении данных таблицы A (или связанных с ней таблиц) с помощью триггеров удаляются все расчеты в таблице B, данные на лету не обновляются (ввиду длительности операции). А расчет выполняется непосредственно, когда пользователь выбирает для работы группу записей A. И тут возникает проблема как зафиксировать только что рассчитанные данные в таблице B? Например, запрос вида: Код: sql 1.
Это могла бы быть функция GetB (PrimaryKey A), которая либо вытягивает данные, либо фиксирует и вытягивает, но, понятно, что записать данные в функции в таблицу B не получится. Альтернатива использовать ХП для расчета значений B перед селектом, но придется ей на вход дублировать все условия WHERE, либо выполнять расчет по всей базе. В любом случае не очень красивое решение. Всем хорошего дня) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 15:18 |
|
Фиксирование результатов в таблицу в функции
|
|||
---|---|---|---|
#18+
Что-то мутно излагаете. Используйте функцию в процедуре. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 16:14 |
|
Фиксирование результатов в таблицу в функции
|
|||
---|---|---|---|
#18+
aleks222, Вкратце: данные необходимо получать в конструкции SELECT, а при их отсутствии предварительно вычислять. Если завернуть функцию в процедуру, то решается проблема с записью в таблицу, но невозможно получить данные в одном SELECT. Получим код вида Код: sql 1.
А в идеале такой вариант: Код: sql 1.
, где функция GetB либо выбирает данные, либо рассчитывает, записывает и выбирает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 16:46 |
|
Фиксирование результатов в таблицу в функции
|
|||
---|---|---|---|
#18+
Tketano где функция GetB либо выбирает данные, либо рассчитывает, записывает и выбирает. Не понятно. Пишете хранимую процедуру, внутри - или возвращаете, или и рассчитываете и возвращаете данные. Ииии? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 16:59 |
|
Фиксирование результатов в таблицу в функции
|
|||
---|---|---|---|
#18+
Tketano, попробуйте пересчитывать В только для изменённых строк в таблице А. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 17:04 |
|
Фиксирование результатов в таблицу в функции
|
|||
---|---|---|---|
#18+
uaggster, использовать процедуру не слишком удобно для динамических запросов со стороны пользователя, об этом автор пишет. Для этого надо "проталкивать" предикаты в процедуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 17:05 |
|
Фиксирование результатов в таблицу в функции
|
|||
---|---|---|---|
#18+
uaggster, Как я перехвачу эти данные из ХП в вышестоящем SELECT? Эти данные пролетят мимо как выходной набор данных. Мне эти данные необходимо сджоинить с сущностями и продолжить логику на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 17:08 |
|
Фиксирование результатов в таблицу в функции
|
|||
---|---|---|---|
#18+
Ну... Exec into сделать, в темповую. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 17:12 |
|
|
start [/forum/topic.php?fid=46&fpage=14&tid=1684279]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
133ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 226ms |
0 / 0 |