Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
Merci pour votre réponse.
Je cherche simplement à faire une fonction qui me retourne le sqlstate de la requête.
Cordialement
Hors ligne
Dans ce cas, ajoutez :
GET STACKED DIAGNOSTICS text_var1 = RETURNED_SQLSTATE;
RETURN text_var1;
après le "END IF;".
Guillaume.
Hors ligne
Pages : 1