Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/02/2005, 01h57   #1
Invité de passage
 
Inscription : février 2005
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 3
Points : 0
Points : 0
Par défaut Instruction dans le IF

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 ^^;;
@+
Juny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2005, 12h25   #2
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE FUNCTION blablabla
'DECLARE
...
BEGIN
...
  IF trucbidule THEN
     RAISE EXCEPTION blabla;
     DELETE FROM ....... ;
  END IF;
.....
END;'
LANGUAGE 'plpgsql';
Il n'y a pas de BEGIN apres de IF, par contre une erreur fréquente est de mettre un END simple alors qu'il faut mettre END IF;

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- if then else, le classique
IF macondition THEN
 ......
ELSE
 ......
END IF.
 
 
-- avec elsif
IF macondition THEN
 .....
 ELSIF macondition THEN
 
 END IF;
 
-- en imbriqué
IF macondition THEN
  ....
   IF monautrecondition THEN
     .....
    END IF;
  .....
END IF;
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2005, 13h31   #3
Invité de passage
 
Inscription : février 2005
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 3
Points : 0
Points : 0
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
Juny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2005, 13h48   #4
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
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é !
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2005, 13h53   #5
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
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
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2005, 17h05   #6
Invité de passage
 
Inscription : février 2005
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 3
Points : 0
Points : 0
J'ai essayé avec RAISE EXCEPTION .... EXCEPTION WHEN RAISE_EXCEPTION THEN.... et ca marche

Merci bcp!

@+
Juny est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h01.


 
 
 
 
Partenaires

Hébergement Web