Структура таблицы вывода результата запроса

День добрый! вот столкнулся с такой задачей... Расскажу наверно всю затею может кто уже такое сделал.
Хочу в своем небольшом приложении сделать гибкую систему отчетов, для этого я собираюсь хранить в базе сам отчет и через дизайнер в самой программе возможность его редактирования. Но это все благополучно решил, осталась проблема в том что бы генерировать источник данных для отчета, ведь хочется сделать что бы было поле в котором можно написать запрос на языке sql при запуске по этому коду создать источник. Единственное что пришло мне на ум это по запросу выборки получать структуру таблицы которая выводится и по ней создать источник. И сам вопрос есть ли функция или еще какой нить способ получить структуру запроса например
( select agent_spr.date_create, agent_spr.tel_dom, post_agent.name_post, agent_spr.number_dover, agent_spr.date_dover
FROM agent_spr
JOIN post_agent ON agent_spr.id_post = post_agent.id;)
и получить на выходе список всех полей и их тип.
За ранее благодарен!

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Уже похожий вопрос был где-то

Уже похожий вопрос был где-то на форуме. Попробуйте в этом направлении

SELECT t.table_name, c.column_name
   FROM information_schema.TABLES t JOIN information_schema.COLUMNS c ON t.table_name=c.table_name
  WHERE t.table_schema::text = 'public'::text AND t.table_catalog::text = current_database()::text AND t.table_type::text = 'BASE TABLE'::text
  ORDER BY t.table_name;

Вы немного не поняли сути

Вы немного не поняли сути вопроса, меня интересует структура самой таблицы вывода результата запроса. Приведу яркий пример:
есть таблица услуг
CREATE TABLE servis
(
id serial NOT NULL,
name_servis character(150),
id_razdel integer NOT NULL,
not_scidka boolean DEFAULT false,
actual boolean,
num double precision
);
есть таблица категорий услуг
CREATE TABLE razdel
(
id serial NOT NULL,
name_razdel character(30)
);

формируем запрос
SELECT servis.id as id_servis, servis.name_servis, razdel.name_razdel, razdel.id as id_rasdel
FROM razdel
JOIN servis ON razdel.id = servis.id_razdel;
и на выходе грубо говоря результат выйдет в таблице
TABLE имя_табл
(
servis serial NOT NULL,
name_servis character(150),
name_razdel character(30),
id_razdel integer NOT NULL
);
вообщем как то так

Ну, и почему же, не понял,

Ну, и почему же, не понял, подставляете в похожий запрос имена таблиц и столбцов и получаете на выходе необходимые данные, ну конечно для этого прийдется распарсить Ваш динамический запрос. И, конечно же, можно запрос сохранить как представление, и тогда в похожем запросе можно будет получить необходимую информацию, делая выборку по имени представления.
В любом случае, Вам необходимо смотреть information_schema.
И по ходу, запрос не возвращает таблицу, т.к. таблица - это объект БД, а возвращает результирующий набор данных, которые могут быть и предсталенны в виде таблицы.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023