Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à tous et à toutes,
je débute dans le développement des procédures plpgsql et j'aimerais savoir ce qui ne va pas sur ma petite requête suivante.
CREATE FUNCTION nb_mission() RETURNS integer AS
$$
BEGIN
RETURN SELECT COUNT(*) FROM mission;
END;
$$
LANGUAGE plpgsql;
j'aimerais retourner le nombre de ligne totale de ma table.
Merci pour votre contribution.
Hors ligne
Comme indiqué dans la documentation (http://docs.postgresql.fr/9.3/plpgsql-c … tures.html) :
* soit on renvoie une expression
CREATE FUNCTION nb_mission() RETURNS integer AS
$$
DECLARE
total integer;
BEGIN
SELECT INTO total COUNT(*) FROM mission;
RETURN total;
END;
$$
LANGUAGE plpgsql;
* soit on retourne le résultat d'une requête
CREATE FUNCTION nb_mission() RETURNS integer AS
$$
DECLARE
total integer;
BEGIN
RETURN QUERY SELECT COUNT(*) FROM mission;;
END;
$$
LANGUAGE plpgsql;
Guillaume.
Hors ligne
Bonjour,
essayez ça :
CREATE OR REPLACE FUNCTION nb_mission() RETURNS integer AS
$$
DECLARE
count_total integer;
BEGIN
SELECT COUNT(*) FROM mission into count_total;
return count_total;
END;
$$
LANGUAGE plpgsql;
Cordialement,
Sébastien.
Hors ligne
trop rapide Guillaume...
désolé pour le doublon.
Cordialement,
Sébastien.
Hors ligne
Merci pour ta disponibilité,
* soit on retourne le résultat d'une requête
ce second cas renvoie l’erreur suivant:
ERREUR: ne peut pas utiliser RETURN QUERY dans une fonction non SETOF
LINE 6: RETURN QUERY SELECT COUNT(*) FROM mission;;
^
********** Erreur **********
ERREUR: ne peut pas utiliser RETURN QUERY dans une fonction non SETOF
État SQL :42804
Caractère : 81
Hors ligne
essaye ça :
CREATE or replace FUNCTION nb_mission() RETURNS setof bigint AS
$$
BEGIN
RETURN QUERY SELECT COUNT(*) FROM mission;
END;
$$
LANGUAGE plpgsql;
Pour executer :
select * from nb_mission();
Cordialement,
Sébastien.
Hors ligne
Dans ce cas, mieux vaut passer par la variable qui contient le résultat à envoyer.
Guillaume.
Hors ligne
Pages : 1