PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 14/04/2014 15:50:08

pljavabruno
Membre

Problème avec une requete plpgsql

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

#2 14/04/2014 16:04:14

gleu
Administrateur

Re : Problème avec une requete plpgsql

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

#3 14/04/2014 16:11:27

ruizsebastien
Membre

Re : Problème avec une requete plpgsql

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

#4 14/04/2014 16:12:36

ruizsebastien
Membre

Re : Problème avec une requete plpgsql

trop rapide Guillaume...
désolé pour le doublon.


Cordialement,

Sébastien.

Hors ligne

#5 14/04/2014 16:19:20

pljavabruno
Membre

Re : Problème avec une requete plpgsql

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

#6 14/04/2014 16:58:25

ruizsebastien
Membre

Re : Problème avec une requete plpgsql

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

#7 14/04/2014 22:31:54

gleu
Administrateur

Re : Problème avec une requete plpgsql

Dans ce cas, mieux vaut passer par la variable qui contient le résultat à envoyer.


Guillaume.

Hors ligne

Pied de page des forums