Я пытаюсь создать функцию в plpgsql, например:
CREATE OR REPLACE FUNCTION select_left_photo_ids(in_photo_id bigint[], in_album_id bigint, in_limit int) RETURNS SETOF bigint[] AS
$$
DECLARE photo_count int;
DECLARE photo_ids bigint[];
BEGIN
SELECT photo_id INTO STRICT photo_ids FROM tbl_album_photos WHERE album_id = in_album_id AND photo_id < in_photo_id ORDER BY photo_id DESC LIMIT in_limit;
GET DIAGNOSTICS photo_count = ROW_COUNT;
IF photo_count < in_limit THEN
SELECT photo_id INTO STRICT photo_ids FROM (SELECT photo_id FROM tbl_album_photos WHERE album_id = in_album_id ORDER BY photo_id LIMIT in_limit) AS dummy ORDER BY photo_id DESC;
END IF;
RETURN photo_ids;
END;
$$
LANGUAGE plpgsql;
Идея состоит в том, чтобы получить идентификаторы фотографий, которые больше, чем входные идентификаторы фотографий. Если нет фотографий в результате получается меньше лимита, я постараюсь получить нижние n записей.
Вышеуказанная функция не работает. Может ли кто-нибудь дать несколько указателей / подсказок или ссылок о том, как сохранить результат запроса выбора в переменной.
Примечание: photo_id - это тип данных bigint[]
- я имею в виду его намеренно bigint[]
.