Valeur de retour d'une fonction si erreur - SQL/NoSQL - Programmation
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
Marsh Posté le 18-10-2004 à 22:59:39
Par exemple :
http://saturn.cs.unp.ac.za/~michae [...] plus09.htm
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
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.
Marsh Posté le 19-10-2004 à 18:15:19
sympa ton lien mais malheureusement Postgres ne reconnait pas le mot clé "EXCEPTION"
Marsh Posté le 19-10-2004 à 20:29:31
c'est balo
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
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.
Marsh Posté le 20-10-2004 à 00:43:21
kk
mais je crois que je vais pas m embeter avec tout ca
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
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'.
Message édité par MrTonio le 18-10-2004 à 21:25:46
---------------
WoIP - Video and Voice over IP - http://www.woip.net/