Valeur de retour d'une fonction si erreur

Valeur de retour d'une fonction si erreur - SQL/NoSQL - Programmation

Marsh Posté le 18-10-2004 à 21:25:11    

Dans PostgreSQL, je voudrais savoir qu'elle valeur retourne une fonction PL/SQL qui n'a pu correctement se terminée a cause d'une erreur.
Par exemple, dans la fonction suivante, on va imaginer que le INSERT foire parce que la valeur de la clé primaire 'col1' existe deja dans la table.
Ma fonction en censé retourner un type 'boolean'.
 

Code :
  1. BEGIN
  2. INSERT INTO table1 (col1, col2) VALUES ($1, $2);
  3. IF NOT FOUND THEN
  4.    RETURN false;
  5. END IF;
  6. RETURN true;
  7. END ;


Message édité par MrTonio le 18-10-2004 à 21:25:46

---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
Reply

Marsh Posté le 18-10-2004 à 21:25:11   

Reply

Marsh Posté le 18-10-2004 à 22:58:23    

Elle retournera rien, et une exception sera levée, qui sera ensuite propagée à l'application appelant la fonction.
 
Pour forcer le retour de la fonction, alors tu dois en interne à ta procédure checker les erreurs et te faire un error manager.
 
Cherche "RAISE" comme mot clé, tu trouveras des exemples d'error manager. RAISE permet de lever une exception manuellement, et on le trouve généralement dans les progs bien écrits qui utilisent un error manager ;)

Reply

Marsh Posté le 18-10-2004 à 22:59:39    

Reply

Marsh Posté le 18-10-2004 à 23:05:59    

merci bien mais il n existe pas une commande particuliere pour empecher de lever les exceptions :??:


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
Reply

Marsh Posté le 19-10-2004 à 00:03:39    

Mise à part faire un error manager qui fait rien, non.
 
PS: quand ton erreur est trappée avec le error manager, normalement tu peux ensuite neutraliser l'exception afin de sortir de la fonction sans propager d'erreur à la fonction appelante.

Reply

Marsh Posté le 19-10-2004 à 18:15:19    

sympa ton lien mais malheureusement Postgres ne reconnait pas le mot clé "EXCEPTION"


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
Reply

Marsh Posté le 19-10-2004 à 20:29:31    

c'est balo :D
 
ben... essaie de voir s'il gère un équivalent, logiquement, oui.
 
Sinon, t'as pas d'autre choix que de vérifier que la requête va passer :
 
LOCK DE LA TABLE
SELECT avec comme filtre les nouvelles valeurs de la clé primaire
SI une ligne trouvée :
   @VALRET = FALSE
SINON
   INSERT des données
   @VALRET = TRUE
FIN SI
UNLOCK de la table
RETURN VALRET

Reply

Marsh Posté le 19-10-2004 à 20:30:29    

PS: le LOCK est impératif si tu veux être certain que la table ne sera pas mise à jour entre ton select et ton insert. Une transaction ne suffira pas à garantir ce point.

Reply

Marsh Posté le 20-10-2004 à 00:43:21    

kk
 
mais je crois que je vais pas m embeter avec tout ca :D


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
Reply

Marsh Posté le 20-10-2004 à 09:30:44    

Bah sinon, logiquement, avec le langage que tu utilises pour appeler ton PL, tu dois pouvoir gérer les exceptions transmises par le SGBD. Tu peux donc les traîter à ce moment :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed