powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Переменное количество полей в ХП
6 сообщений из 6, страница 1 из 1
Переменное количество полей в ХП
    #34116088
Alex.Ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как заставить ХП выдавать разное количество полей разного типа.
я так понимаю если я создал хп типа : .....RETURNS SETOF "public"."mytype" то ничего кроме mytype она вернуть не может. Что делать ?
Нужно для итогового отчета.

Спасибо.
...
Рейтинг: 0 / 0
Переменное количество полей в ХП
    #34116112
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это отчет, то ты наверное знаешь хоть примерно каков возможный набор полей?

Может сделать возврат через массив?
...
Рейтинг: 0 / 0
Переменное количество полей в ХП
    #34116143
Alex.Ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень примерно.
Со временем оно будет существенно расти.
Заголовки столбцов это клиенты. Точнее параметры клиентов. По 2-3 шт на клиента. Единственное что известно точно это типы полей могут быть varchar и decimal.
...
Рейтинг: 0 / 0
Переменное количество полей в ХП
    #34116160
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть вариант с временной таблицей:

1. Запускаешь ХП
2. Она готовит данные
3. Создает временную таблицы
4. Записывает полученные данные во временную таблицу
5. Потом ты получаешь данные из этой таблицы
...
Рейтинг: 0 / 0
Переменное количество полей в ХП
    #34149868
Сергей АБ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня БД перенесена из MS SQL. Там спокойно из процедуры возвращал любой набор набор данных. В Постгресе сделал так же, чуточку помудился только с клиентом. Функция должна возвращать refcursor, внутри функции объявляем переменную этого типа, открываем курсор для нужного запроса (open <cursor> for..(можно и для динамического SQL - open <cursor> for execute ())), и возвращаем его клиенту.
Вызов функции осуществляется в несколько шагов (у меня всё через API ODBC):
1. открывает транзакцию, т.к. рефкурсор будет достепен только на время транзакции;
2. вызываем функцию, на клиенте получаем имя рефкурсора - "<unnamed portal N>", где N - порядковый номер курсора в соединении;
3. забираем набор данных из курсора - fetch all from "<unnamed portal N>";
4. закрываем транзакцию.
...
Рейтинг: 0 / 0
Переменное количество полей в ХП
    #34150057
BlackDan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION get_report() RETURNS SETOF RECORD AS  $BODY$ DECLARE
  _result RECORD;
BEGIN
  SELECT  1  AS id, 'test1'::varchar AS name INTO _result;
  RETURN NEXT _result;
  SELECT  2  AS id, 'test2'::varchar AS name INTO _result;
  RETURN NEXT _result;
  RETURN;
END $BODY$  LANGUAGE 'plpgsql' STABLE SECURITY DEFINER

Код: plaintext
SELECT * FROM  get_report() AS (id INT4, name VARCHAR)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Переменное количество полей в ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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