Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть из функции набор данных + свои данные / 3 сообщений из 3, страница 1 из 1
25.06.2020, 08:58
    #39972995
SansAmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть из функции набор данных + свои данные
Здравствуйте! Работаю с Firebird, но возникла задача импортировать данные из БД PostrgreSQL в Firebird.
Решил сделать функцию в БД PostrgreSQL. Нужно вернуть значения полей набора данных по запросу с джойнами, для каждой записи выполнять другие запросы для несвязанных данных, обрабатывать и результат этих вычислений тоже помещать в возвращаемые переменные для каждой записи. В PostrgreSQL новичок, не могу понять, какой тип возвращаемых данных выбрать для функции и какой подход лучше использовать. Если делать через RETURNS TABLE, то не могу добавить в возвращаемый набор произвольные поля, не входящие в запрос. Та же история с SETOF <tablename>. Записывать данные во временную таблицу, а затем из нее выбирать, не вариант, наверное. Выборка по временным периодам, которые из клиента будут задаваться как параметры и придется на каждый чих прибивать таблицу и генерить новую с последующей выборкой. Через курсоры? Как тогда возвращать? Клиент на Дельфях, связка обычная - датасет->датасоурс->грид. Вроде как должно быть все просто, но вчера полдня потратил а воз не сдвинулся. После Firebird возможностей очень много, а того, что мне нужно, найти не получилось. Хелп, плз.
...
Рейтинг: 0 / 0
25.06.2020, 09:31
    #39973007
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть из функции набор данных + свои данные
>SansAmp, сегодня, 08:58 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1326764&msg=22156937][22156937]
>...Нужно вернуть значения полей набора данных по запросу…
<
Попробуй использовать refcursor, как то так: (см. слаид)
...
Рейтинг: 0 / 0
25.06.2020, 14:39
    #39973175
SansAmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть из функции набор данных + свои данные
Это не решает задачу, я опять получу только поля, определенные в запросе курсора, а нужно произвольные вернуть.
В качестве примера все упростил, запрос с джойнами и возвращаемых полей поболее будет и в цикле много логики, но суть понятна. Получилось вот так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE OR REPLACE FUNCTION sel_order_for_import_9(IN start_date date, IN end_date date)
  RETURNS TABLE(id integer, created_at timestamp with time zone,
    name_sender character varying, phone_sender character varying, to_import boolean)
AS
$BODY$
DECLARE
  r RECORD;
BEGIN
  to_import = False;   
  
  FOR r IN
    select O.id, O.created_at, O.name_sender, O.phone_sender
    from order_order O
    where (O.data_receiving >= $1) and
          (O.data_receiving < $2)
    order by data_receiving
  LOOP
    id := r.id;
    created_at := r.created_at;
    name_sender := r.name_sender;
    phone_sender := r.phone_sender;    
    
    return NEXT;
  END LOOP; 
end
$BODY$
LANGUAGE plpgsql


Это оптимально для такой задачи?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть из функции набор данных + свои данные / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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