IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Instruction dans le IF


Sujet :

PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 1
    Points
    1
    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 ^^;;
    @+

  2. #2
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    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

  4. #4
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    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é !
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  5. #5
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    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
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé avec RAISE EXCEPTION .... EXCEPTION WHEN RAISE_EXCEPTION THEN.... et ca marche

    Merci bcp!

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/01/2007, 10h20
  2. Réponses: 22
    Dernier message: 16/08/2006, 13h11
  3. Annulation d'Instruction dans le srv par le Clients
    Par dali20022 dans le forum Struts 1
    Réponses: 4
    Dernier message: 30/06/2006, 17h26
  4. plusieurs instructions dans un onClick
    Par illegalsene dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/01/2006, 11h10
  5. instructions dans url
    Par le69 dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2005, 07h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo