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 :

[plpgsql] Clause in en parametre de fonction


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut [plpgsql] Clause in en parametre de fonction
    Bonjour,
    J'essaie d'envoyer le texte d'une clause IN en paramètre d'une fonction. Si je passe une seule valeur ça marche mais à partir de 2 le serveur n'arrive pas à faire le matching.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE FUNCTION mafonction(text)
      RETURNS integer AS
    $BODY$
    DECLARE
    	i bigint;
    BEGIN
    		select into i count(distinct id) from objects1 where id IN($1);
    		return i;
    END
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE;
    ALTER FUNCTION mafonction(text);
    Si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from mafonction('202500066668693')
    Ca me renvoie 1 (c'est bon).
    Mais si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from mafonction('202500066668693,202500001319972')
    Ca me renvoie 0...
    C'est sûrement un problème d'interprétation du paramètre mais je ne vois pas comment le résoudre.

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    OK je crois que j'ai pigé.
    Il fallait mettre ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE FUNCTION mafonction(integer[])
      RETURNS integer AS
    $BODY$
    DECLARE
    	i bigint;
    BEGIN
    		SELECT INTO i count(DISTINCT id) FROM objects1 WHERE id = ANY($1);
    		RETURN i;
    END
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE;
    ALTER FUNCTION mafonction(integer[]);

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Par défaut
    Le problème vient du fait qu'il place la chaîne complète à la place indiquée. Donc quand $1 vaut '11111', il exécutera l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT INTO i count(DISTINCT id) FROM objects1 WHERE id IN('1111');
    Et si $1 vaut '11111,22222', il exécutera l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT INTO i count(DISTINCT id) FROM objects1 WHERE id IN('11111,22222');
    Autrement dit, il cherchera toutes les lignes dont la colonne id vaut la chaîne '11111,22222'.

    Si tu veux qu'il utilise cette chaîne pour complètement l'intégrer à l'instruction tu dois utiliser EXECUTE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE 'SELECT count(DISTINCT id) FROM objects1 WHERE id IN(' || $1 || ');';
    Attention, EXECUTE n'accepte pas la clause INTO dans un SELECT, il faut donc placer le INTO derrière et le type de cette variable doit être un RECORD. Bref, ça devient plus complexe que la solution que tu as trouvé...

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

Discussions similaires

  1. reference anomyme en parametre de fonction
    Par seb9999 dans le forum C++
    Réponses: 7
    Dernier message: 03/02/2006, 15h31
  2. [VBA-E]passage de parametre à une fonction
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/02/2006, 17h51
  3. Parametre de fonction
    Par yoshï dans le forum Linux
    Réponses: 1
    Dernier message: 09/01/2006, 10h46
  4. parametre et fonction
    Par jeff_! dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/12/2005, 09h55
  5. Réponses: 13
    Dernier message: 13/10/2005, 16h03

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