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