Привет
Нужно создать функцию на plpgsql что бы возвращала набор данных из связных таблиц в одной строке.
Пробовал создать функцию с типом возвращаемого значения record, но при вызове выдает только пустые значения.
Подскажите где лежат грабли?
Вот сама функция:
CREATE OR REPLACE FUNCTION Car_info(CarID integer) RETURNS record as $$
Declare
res record;
FDriverID integer;
SDriverID integer;
BEGIN
FDriverID = (Select "Driver1" From "Second_Task"."Crew" where "CrewID" = CarID);
SDriverID = (Select "Driver2" From "Second_Task"."Crew" where "CrewID" = CarID);
Select * into res from
(select get_driver_fio(FDriverID) AS FIO1, "Adres" as Driver1A, "PhoneNumber" as Driver1PN
from "Second_Task"."Drivers"
where "DriversID" = FDriverID
) as FDriver,
(select get_driver_fio(SDriverID) AS FIO2, "Adres" as Driver1A, "PhoneNumber" as Driver1PN
from "Second_Task"."Drivers"
where "DriversID" = SDriverID
) as SDriver;
return res;
END;
$$ LANGUAGE plpgsql volatile;
А вот так вызывал
Select * from car_info(14) as (FIO1 text, Driver1A text, Driver1PN text, FIO2 text, Driver2A text, Driver2PN text) ;
У тебя вызывается наверное
У тебя вызывается наверное такая ошибка:
ERROR: a COLUMN definition list IS required FOR functions returning "record"
Чтобы функция возвращала набор данных, надо этот набор именовывать по типам. Иначе - никак.
Ты либо из функции вызываешь TABLE(field1 integet...) либо раскидываешь как в своём примере.
ошибка не выдается
ERROR: a COLUMN definition list IS required FOR functions returning "record"
такой ошибки у меня нет.
Запрос выполняется только в результате я получаю строку в которая все столбцы пустые.
Не совсем понял, что ты предлагаешь сделать.
Тип возвращаемого значения на table я пробовал - тогда он даже одной строки не выдает, а в результате выполнения запросы видна только шапка.
Какая-то редкостная ахинея
Какая-то редкостная ахинея написана в функции. Вы можете словами объяснить чего вы хотите добиться? Пример таблиц, что должно выдавать?
Хочу склеить столбцы из двух
Хочу склеить столбцы из двух селектов в одну таблицу,
в итоге должна получится таблица из 6 столбцов
Столбцы из двух селектов в
Столбцы из двух селектов в одну таблицу склеиваются JOIN'ами (по общему столбцу или без него), таблицы с таблицей UNION'ами. Ничего городить для этого не нужно.
забыл добавить, что самое
забыл добавить, что самое главное это, то что все это должно быть в функции, при вызове которой должна выводится итоговая таблица. Так что как склеивать таблицы не важно (но за совет спасибо)
Нашел
Если вдруг кому-то пригодится, то запрос в принципе верный, только команда into res стоит не на своем месте, на поставить после обеих таблиц.