Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Pages : 1