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 :

condition if


Sujet :

PostgreSQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 36
    Par défaut condition if
    Bonjour,

    j'essaie d'utiliser des conditions dans une procédure stocké mais ça ne marche pas :
    CREATE OR REPLACE FUNCTION list(varchar,varchar) RETURNS setof org AS
    $body$
    IF $2 <> 'ADM'
    select * from organigramme where entorg like (select entorg from agent where matricule like $1) || '%';
    else
    select * from organigramme;
    end
    $body$
    LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

    quelqu'un aurait-il une idée ?

    merci

  2. #2
    Membre chevronné Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Par défaut
    La syntaxe a utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF condition THEN
        ...
    ELSE
        ...
    END IF;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 36
    Par défaut
    j'avais déjà essayé mais ça ne marche pas.

    CREATE OR REPLACE FUNCTION list(varchar,varchar) RETURNS setof org AS
    $body$
    IF $2 <> 'ADM' then
    select * from org where entorg like (select entorg from agent where matricule like $1) || '%';
    else
    select * from org;
    end if;
    $body$
    LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

    => il me met error at or near if

  4. #4
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    il manque BEGIN .... END

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE FUNCTION list(varchar,varchar) RETURNS setof org AS
    $body$
    BEGIN
    IF $2 <> 'ADM' then
    select * from org where entorg like (select entorg from agent where matricule like $1) || '%';
    else
    select * from org;
    end if;
    END
    $body$
    LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 36
    Par défaut
    ...ça ne change rien, même message

  6. #6
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    j'avais pas remarqué , mais tu prend comme langage 'sql' , je ne pense pas que begin, if, else, .... existent, c'est le plpgsql qui le permet

  7. #7
    Membre éprouvé
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    Forcément, un bloc "IF THEN ELSE" dans une procédure codée en sql, il va avoir du mal à comprendre

    EDIT : arf, trop lent

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 36
    Par défaut
    oui mais là il me met "SELECT query has no destination for result data"

  9. #9
    Membre éprouvé
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    Effectivement, c'est normal... Si on reste en plpgsql, il faut boucler sur ton select avec un for et faire une série de 'return next'...

    Mais bon, il doit y avoir moyen de rester avec du SQL pur. Essaie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE FUNCTION list(varchar,varchar) RETURNS setof org AS
    $body$
     
    select * from org
    where (case when $2 <> 'ADM' 
          then (entorg like (select entorg from agent where matricule like $1) || '%')
          else true end);
    $body$
    LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 36
    Par défaut
    ça marche impec !!!

    merci merci merci !!

Discussions similaires

  1. Condition If multiple
    Par M1000 dans le forum ASP
    Réponses: 2
    Dernier message: 01/03/2004, 13h46
  2. [MYSQL] conditions et requetes
    Par sebos63 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 16h41
  3. Condition sur debug et release
    Par xave dans le forum MFC
    Réponses: 3
    Dernier message: 04/02/2004, 15h04
  4. Condition et contenu TImage
    Par Detlev_linux dans le forum Langage
    Réponses: 6
    Dernier message: 23/12/2003, 01h00
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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