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 28/04/2014 11:14:16

CECAUB
Membre

Function de retour sqlstate

Bonjour,

J'aimerai faire une fonction qui retour soit le nom du client si celui est trouve, soit le code sqlstate

Si je met sqlstate en 2eme paramètre du Raise exception, il dit que la colonne sqlstate n'exisyte pas.
Pouvez vous m'aider ?
Merci

CREATE OR REPLACE FUNCTION obtenirsqlstate(i integer) RETURNS VARCHAR AS
$$
declare nomg CLI.nom%TYPE;
BEGIN
   SELECT NOM INTO nomg FROM CLI where clicsp=$1;
   IF NOT FOUND THEN
   RAISE EXCEPTION 'cli introuvable : % %', $1, sqlstate;
   ELSE
   RETURN nomg;
   END IF;
END
$$
LANGUAGE 'plpgsql' ;

Hors ligne

#2 28/04/2014 15:49:45

gleu
Administrateur

Re : Function de retour sqlstate

sqlstate n'est pas une variable automatiquement déclarée. Vous devez utiliser l'instruction GET STACKED DIAGNOSTICS variable = élément. Voir http://docs.postgresql.fr/9.3/plpgsql-c … tures.html pour les détails.


Guillaume.

Hors ligne

#3 28/04/2014 17:02:04

CECAUB
Membre

Re : Function de retour sqlstate

Merci mais c'est ce que j'essaie de faire et il me dit :"
ERREUR: le contrôle a atteint la fin de la fonction sans RETURN"  dans le cas d'un NOT FOUND

drop FUNCTION obtenirsqlstate2();
CREATE OR REPLACE FUNCTION obtenirsqlstate2(i integer) RETURNS VARCHAR AS
$$
declare nomg CLI.nom%TYPE;
declare text_var1 text;
BEGIN
   SELECT NOM INTO nomg FROM CLI where clicsp=$1;
   IF FOUND THEN
      RETURN nomg;
   END IF;
   EXCEPTION
      WHEN OTHERS THEN
      BEGIN
           RAISE NOTICE 'NONTROUVE';
           GET STACKED DIAGNOSTICS text_var1 = RETURNED_SQLSTATE;
           RETURN text_var1;
      END;
END;
$$
LANGUAGE 'plpgsql' ;

Hors ligne

#4 28/04/2014 17:29:39

gleu
Administrateur

Re : Function de retour sqlstate

Je ne comprends pas votre problème. En effet, il n'y a pas de RETURN si la requête SELECT ne trouve aucune ligne. Le bloc d'exception n'est exécuté que si une exception est attrapée. Or une requête qui ne renvoie pas de lignes n'est pas en erreur et du coup, ne renvoie pas d'exception. ll vous manque un RETURN après "END IF;".


Guillaume.

Hors ligne

#5 29/04/2014 10:45:26

CECAUB
Membre

Re : Function de retour sqlstate

Merci pour votre réponse.
Je cherche simplement à faire une fonction qui me retourne le sqlstate de la requête.
Cordialement

Hors ligne

#6 29/04/2014 21:39:01

gleu
Administrateur

Re : Function de retour sqlstate

Dans ce cas, ajoutez :

GET STACKED DIAGNOSTICS text_var1 = RETURNED_SQLSTATE;
RETURN text_var1;

après le "END IF;".


Guillaume.

Hors ligne

Pied de page des forums