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 :

utiliser le resultat d´un select dans une fonction


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Par défaut utiliser le resultat d´un select dans une fonction
    Bonsoir à tous

    J´ai plusieurs tables et je voudrai dans une fonction de validation pour des une valeur ecrite dans une table, ceci en prennant à l´aide d´un select une valeur dans une autre table. ma fonction se presente ainsi:

    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
    CREATE OR REPLACE FUNCTION delay_check(integer)
      RETURNS boolean AS
    $BODY$
    DECLARE 
     
    BEGIN
     
    IF ($1 < 0 ) 
     THEN
    Raise Exception 'Test|numb1|delay|WRONG_DELAY|%|is a wrong delay (% < 0)',$1,$1;
    END IF;
     
    SELECT * FROM numb1_layout max_value;
     
    IF ($1 > max_value)
    THEN
    Raise Exception 'Test|numb1|delay|WRONG_DELAY|%|is a wrong delay (% > %}$',$1,$1,max_value;
    END IF;
    RETURN true;
    END;
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE;
    ALTER FUNCTION delay_check(integer) OWNER TO postgres;
    Je recois comme méssage d´erreur "les resultas du select ne sont pas utilisés". Est ce qu´un d´entre vous aurait une idée comment resoudre ce problème?
    Merci d´avance et bonne fin de soirée.

    YP

  2. #2
    jnore
    Invité(e)
    Par défaut
    Bonjour,

    Il te faut deja declarer une variable sous 'DECLARE' puis intégrer dans la variable la valeur de ton select:

    comme ceci
    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
    24
    25
    CREATE OR REPLACE FUNCTION delay_check(integer)
    RETURNS BOOLEAN AS
    $BODY$
    DECLARE 
    max_value INTEGER; ///si la variable est un integer 
    BEGIN
     
    IF ($1 < 0 ) 
     THEN
    Raise Exception 'Test|numb1|delay|WRONG_DELAY|%|is a wrong delay (% < 0)',$1,$1;
    END IF;
     
    SELECT INTO max_value champ_a_recuperer 
    FROM numb1_layout
    WHERE ligne=critere; ///BIEN S'ASSURER QUE TU ES FILTRE POUR N'AVOIR QU'UNE LIGNE 
    IF ($1 > max_value)
    THEN
    Raise Exception 'Test|numb1|delay|WRONG_DELAY|%|is a wrong delay (% > %}$',$1,$1,max_value;
    END IF;
    RETURN true;
    END;
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE;
    ALTER FUNCTION delay_check(integer) OWNER TO postgres;
    Il est possible aussi d'associer toute une ligne dans une variable "RECORD" que tu pourra décomposer en cas de besoin.

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Par défaut Merci pour ta reaction
    Bonjour

    déjà merci pour ta reaction, mais j´ai encore une question, à quoi correspond champ_a_recuperer dans dans ton code à ce niveau ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT INTO max_value champ_a_recuperer 
    FROM numb1_layout
    WHERE ligne=critere; ///BIEN S'ASSURER QUE TU ES FILTRE POUR N'AVOIR QU'UNE LIGNE
    merci encore

    YP

  4. #4
    jnore
    Invité(e)
    Par défaut
    Ce champ correspond à ta valeur que tu veux récupérer.
    J'ai mis ce nom parceque je ne connais pas le nom de tes champs de table.

    Mets nous ta requete avec tes noms de champ.

    L'objectif est de récupérer la valeur du champ en question et de le mettre dans une variable.

  5. #5
    Membre averti
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Par défaut
    j´ai deux tables numb1(avec comme colones: id, phone_number,email_adress, sip_adress,Port_number, url,delay) et numb1_layout(avec comme colones:id,name,min_value et max_value).
    Dans la table numb1_layout j´ai les valeurs suivantes (1 dans id, delay dans name, 0 dans min_value et 30 dans max_value).
    Je souhaite ecire une fonction pour valider les valeurs entrées dans numb1 pour la colone delay et pour cela j´aimerai prendre à l´aide d´un select la valeur dans max_value de numb1_layout et l´utiliser comme base de comparaison.

  6. #6
    jnore
    Invité(e)
    Par défaut
    OK, mais dans ta table numb1_layout, j'imagine que t'as plusieurs lignes.
    Y a t-il un critère de filtrage?
    Parceque si tu fais un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select max_value from numb1_layout;
    , tu auras trop de ligne.

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

Discussions similaires

  1. [XL-2010] Utiliser sheet.select dans une fonction personnalisée
    Par sebkem dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/04/2015, 15h37
  2. Réponses: 3
    Dernier message: 27/07/2011, 11h57
  3. Utiliser la valeur d’un textbox dans une requete sql
    Par Developpeur19 dans le forum VB.NET
    Réponses: 8
    Dernier message: 14/11/2008, 09h10
  4. Utilisation de variables de Gui dans une fonction
    Par campofelliz dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 20/08/2007, 17h46
  5. Réponses: 23
    Dernier message: 10/01/2007, 01h09

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