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

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

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

1. Запускаешь ХП
2. Она готовит данные
3. Создает временную таблицы
4. Записывает полученные данные во временную таблицу
5. Потом ты получаешь данные из этой таблицы
...
Рейтинг: 0 / 0
23.11.2006, 12:55
    #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
23.11.2006, 13:33
    #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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Переменное количество полей в ХП / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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