У меня есть запрос, который вызывает функцию в предложении select. Функция возвращает тип записи. В вызывающем запросе я хочу упорядочить по одному из полей в возвращаемой записи, и, если возможно, я бы также хотел вернуть поля записи как поля вызывающего запроса. Чтобы сделать это понятным, вот упрощенная версия кода:
CREATE OR REPLACE FUNCTION getStatus(lastContact timestamptz, lastAlTime timestamptz, lastGps timestamptz, out status varchar, out toelichting varchar, out colorLevel integer)
RETURNS record AS
$BODY$
BEGIN
status := 'controle_status_ok';
toelichting := '';
colorLevel := 3;
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION DMI_Controle_getStatus(timestamptz, timestamptz, timestamptz, out varchar, out varchar, out integer) OWNER TO xyz;
Используя эту функцию, я хочу получить запрос, подобный следующему:
SELECT
id,
name,
getStatus(tabel3.lastcontact, tabel4.lastchanged, tabel5.lastfound) as status
FROM
tabel1
left join tabel2 on ...
left join tabel3 on ...
left join tabel4 on ...
left join tabel5 on ...
ORDER BY
status
Postgres приходит со следующей ошибкой:
ОШИБКА: не удалось определить оператор упорядочения для записи типа
СОВЕТ: используйте явный оператор упорядочения или измените запрос.
Вопрос: как мне упорядочить по значению colorLevel, возвращенному getStatus?
Дополнительный вопрос: могу ли я вернуть три поля функции getStatus в поля запроса, который вызывает функцию getStatus?