|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2005 Messages : 3 ![]() |
Bonjour tout le monde!
Est-ce possible d'executer deux instructions dans le IF d'une fonction? Par exemple, si machin alor raise exception blabla et un delete, ca donne du genre: CREATE FUNCTION blablabla 'DECLARE ... BEGIN ... IF trucbidule THEN RAISE EXCEPTION blabla et la je veu faire un delete en plus ... END;' LANGUAGE 'plpgsql'; bien sur je lai ecri juste apres mon raise exception et avant le else, ca retourne lexception mais ca meffectue pa le delete... Jai aussi essaye de mettre un BEGIN et un END entre le THEN et le ELSE, ca marche pa nan pu... Merci de m'aider même si la reponse peut paraitre evidente ^^;; @+ |
|
|
00
|
|
|
#2 | ||||
|
Membre émérite
![]() ![]() Inscription : mars 2002 Messages : 770 ![]() |
Bonjour,
oui il est tout a fait possible de mettre plusieurs instruction dans un if, et meme plusieurs if imbriqués si tu veux, je t'invite a jeter un oeil sur la doc : http://www.postgresql.org/docs/8.0/s...L-CONDITIONALS exemple : Code :
Code :
|
||||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2005 Messages : 3 ![]() |
Merci pour les explications, mais ca marche tjs pa je comprend pa...
Ca me retourne l'erreur blabla mais a coté, apres un refresh, ca n'enleve tjs pa le n-uplet que je veu supprimer... CREATE OR REPLACE FUNCTION Nom_Fonction() RETURNS trigger AS 'DECLARE var ... var2 ... BEGIN SELECT INTO var ... FROM ... WHERE ...; SELECT INTO var2 FROM.... WHERE ...; IF ... THEN RAISE EXCEPTION blabla; DELETE FROM .... WHERE col = NEW.truc; ELSE RETURN NEW; END IF; END;' LANGUAGE 'plpgsql'; Normalement ca doit me supprimer le n-uplet mais ca le fait pa |
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() ![]() Inscription : mars 2002 Messages : 770 ![]() |
en fait ton probleme vient qu'une instruction RAISE EXCEPTION lève une erreur et interrompt la transaction courante, donc ton DELETE n'est pas appelé !
|
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() ![]() Inscription : mars 2002 Messages : 770 ![]() |
si tu veux juste notifier par un message utilise RAISE NOTICE qui n'interromp pas la transaction,
sinon regarde dans la doc à WHEN RAISE_EXCEPTION THEN |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : février 2005 Messages : 3 ![]() |
J'ai essayé avec RAISE EXCEPTION .... EXCEPTION WHEN RAISE_EXCEPTION THEN.... et ca marche
Merci bcp! @+ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com