Добрый вечер.
Не смог ничего найти приемлемого для себя в справочниках и гугле, вот решил задать вопрос.
Допустим, в БД хранится документ с двумя табличными частями - в трех таблицах соответственно. Задача состоит в запросе списка документов с содержимым всех табличных частей.
В аналоги могу лишь привести 1С : если сделать подобный запрос с итогами, с помощью нескольких выборок на разных уровнях иерархии можно обойти как шапки документов, так и табличные части. Здесь главным критерием является то, что запрос на сервер оформляется один. Код выглядит как обход дерева.
Ничего похожего без извращений я не могу придумать по отношению к Firebird. Была бы одна табличная часть - можно было бы просто сделать левое соединение табличной части к шапке по ключу документа, таким образом каждая строка табличной части сопровождалась бы комплектом реквизитов из шапки документа. Конечно, объем передаваемых данных умножается, но это не так критично (если не говорить о сотне реквизитов в шапке и табличной части).
Передо мной стоит задача работы с документами, содержащими несколько табличных частей. Решать в лоб - в цикле по каждому документу отдельными запросами к каждой табличной части - дилетантизм. Слишком медленно, даже с учетом предварительной подготовки запросов и работы через параметры.
Возможно написать хранимую процедуру, в которой уже циклами обработать все данные согласно структуре, но как в таком случае возвращать данные на клиента? В ячейке ведь нельзя передать коллекцию, как в Oracle? Составлять протокол ключ-значение и передавать иерархию, развернутую в список? Выглядит извращением и болью при необходимости изменить потом что-либо в структуре документа.
Подскажите, пожалуйста, как возможно решить подобную задачу одним запросом. Наверняка должны быть типовые решения.
Буду благодарен за указание любого источника, спасибо.
Не смог ничего найти приемлемого для себя в справочниках и гугле, вот решил задать вопрос.
Допустим, в БД хранится документ с двумя табличными частями - в трех таблицах соответственно. Задача состоит в запросе списка документов с содержимым всех табличных частей.
В аналоги могу лишь привести 1С : если сделать подобный запрос с итогами, с помощью нескольких выборок на разных уровнях иерархии можно обойти как шапки документов, так и табличные части. Здесь главным критерием является то, что запрос на сервер оформляется один. Код выглядит как обход дерева.
Ничего похожего без извращений я не могу придумать по отношению к Firebird. Была бы одна табличная часть - можно было бы просто сделать левое соединение табличной части к шапке по ключу документа, таким образом каждая строка табличной части сопровождалась бы комплектом реквизитов из шапки документа. Конечно, объем передаваемых данных умножается, но это не так критично (если не говорить о сотне реквизитов в шапке и табличной части).
Передо мной стоит задача работы с документами, содержащими несколько табличных частей. Решать в лоб - в цикле по каждому документу отдельными запросами к каждой табличной части - дилетантизм. Слишком медленно, даже с учетом предварительной подготовки запросов и работы через параметры.
Возможно написать хранимую процедуру, в которой уже циклами обработать все данные согласно структуре, но как в таком случае возвращать данные на клиента? В ячейке ведь нельзя передать коллекцию, как в Oracle? Составлять протокол ключ-значение и передавать иерархию, развернутую в список? Выглядит извращением и болью при необходимости изменить потом что-либо в структуре документа.
Подскажите, пожалуйста, как возможно решить подобную задачу одним запросом. Наверняка должны быть типовые решения.
Буду благодарен за указание любого источника, спасибо.