PL/pgSQL: Peut-on stocker le résultat d'une requête dans une variable
Je suis en train de créer une fonction plpgsql comme:
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;
L'idée est de récupérer la photo d'identité qui sont plus grand que d'entrée de la photo d'identité. Si les pas de. de photos dans la suite vient à être inférieure à la limite, je vais essayer de chercher n derniers enregistrements.
La fonction ci-dessus ne fonctionne pas. Quelqu'un pourrait donner un certains pointeurs/conseils ou des liens sur la façon de stocker le résultat d'une requête select dans une variable.
Remarque: photo_id est un bigint[]
type de données - je veux dire son intentionnellement bigint[]
.
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter un
array_agg
àbigint[]
résultat à mettre dans votrebigint[]
cible.Alors vous aurez besoin d'ajouter une table dérivée pour obtenir votre LIMITE de travailler.
Vous pouvez demander au tableau comment elle est grande au lieu de regarder ROW_COUNT:
Et puis la prochaine SELECT...INTO serait semblable à la nouvelle
array_agg
version ci-dessus.array_agg
peut construire toute sorte de tableau.