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 :

retour d'une fonction


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut retour d'une fonction
    Bonjour,

    j'ai une fonction qui prend en paramètre un entier (correspondant à l'id d'une table) me retourne un varchar du type : (qui sont en fait les id d'une table séparés par une virgule
    Le problème est lorsque j'exécute cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE id IN (SELECT mafonction(x));
    Cette requete ne me renvoit rien alors que la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE id IN (1,2,3);
    mer envoit le résultat tant espéré

    Est-ce du au retour de ma fonction qui est un varchar ??

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 81
    Par défaut
    bonjour...
    je pense que le pbm vient peut être de la fonction. essaye de mettre le corps de ta fonction pour qu'on voit mieux.
    cordialement.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    en fait j'ai donné cet exemple pour simplifier mais la fonction citée appelle 2 autres fonctions qui sont assez compliquées si tu n'as pas le modèle de ma base de données en tête (qui est très lourd).
    Donc je suis en train d'essayer une autre méthode qui me confirmera si cela vient du retour en varchar ou du retour de ma fonction qui n'est pas bon.
    Je vous tiendrai au courant mais si quelqu'un a déjà eu le même type de souci je suis preneur.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    Bon alors conclusion finale.
    J'ai réussi grace à ma méthode : en fait je découpe ma chaine de caractère et je stocke tous mes élèments dans un tableau d'entiers.

    GrandFather : je ne connaissais pas le SETOF mais si j'ai bien compris c'est plus ou moins ce que je fais ? Si j'ai compris les docs que j'ai lu, SETOF int4 renvoit un tableau d'entiers ? Je n'ai pas utilisé cette méthode car j'étais déjà parti sur mon autre méthode et que repartir sur un SETOF impliquait de changer d'autres fonctions qui étaient appelées par ma fonction mais par la suite ça peut bien m'aider.

    Merci

  5. #5
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par papy_tergnier
    Si j'ai compris les docs que j'ai lu, SETOF int4 renvoit un tableau d'entiers ?
    Pas exactement, SETOF te retourne un jeu d'enregistrement, une table virtuelle en quelque sorte. En précisant int4, le jeu d'enregistrement est composé de tuples avec un seul champ, de type entier. Mais il est possible de renvoyer un jeu d'enregistrement composé de tuples du type d'une de tes tables ou même d'un type personnalisé. C'est une fonctionnalité très puissante, qui ouvre énormément de possibilités. C'est la façon dont les procédures stockées, utilisées dans d'autres SGBD, sont implémentées dans PostgreSQL.

    Pour ton problème présent, tu l'as résolu en utilisant une forme de IN qui accepte les valeurs scalaires ; dans ce contexte, c'est plus performant qu'utiliser la version de IN qui prend en paramètre une sous-requête, constituée par une fonction retournant un SETOF.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    merci !!!
    comme tu dis ça a l'air bien puissant !!!

    A+

  7. #7
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    Citation Envoyé par papy_tergnier
    Est-ce du au retour de ma fonction qui est un varchar ??
    Oui.

    Ta fonction doit retourner un jeu d'enregistrement comportant un seul champ de type entier ; en d'autres termes, ta fonction doit retourner un SETOF int4.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/09/2006, 14h17
  2. [XML][XSLT][debutant]retour d'une fonction
    Par maxvador dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 30/03/2006, 14h12
  3. recuperer en php le retour d'une fonction plsql
    Par gismoblue dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/03/2006, 16h39
  4. PL/SQL retour d'une fonction
    Par aaronw dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/12/2005, 13h25
  5. [Oracle 9.1] Types de retour d'une fonction PL/SQL
    Par ftrifiro dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/10/2005, 16h54

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