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

Requêtes PostgreSQL Discussion :

Lecture d'un tableau résultant d'une fonction [9.5]


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 202
    Par défaut Lecture d'un tableau résultant d'une fonction
    Bonjour,
    J'ai un petit soucis pour accéder aux valeurs d'un tableau qui provient d'une fonction perso.
    Cette fonction retourne le tableau de données suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0:2]={"{68,3}","{92,1}","{93,7}"}
    Je cherche à lire ces infos dans une autre fonction (fonction de test) :
    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
     
    CREATE OR REPLACE FUNCTION test.stock(p_id_article INTEGER) RETURNS VOID AS $$
    DECLARE
        v_data_stock TEXT[];
        i            SMALLINT;
        v_id_stock   INTEGER;
        v_quantite   INTEGER;
    BEGIN
        SELECT test.verif_stock(p_id_article) INTO v_data_stock;
     
        i = 0;
        WHILE v_data_stock[i] IS NOT NULL LOOP
            v_id_stock = v_data_stock[i][0];
            v_quantite = v_data_stock[i][1];
            RAISE NOTICE 'id_stock=% - quantite_stock=%', v_id_stock, v_quantite;
            i = i + 1;
        END LOOP;
    END;
    $$ LANGUAGE plpgsql;
     
    SELECT test.stock(4555846);
    Pour le moment les variables v_id_stock et v_quantite restent vide, je ne vois pas trop comment accéder aux éléments {68,3}, {92,1} et {93,7}
    Une idée ?

    Merci

  2. #2
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    L'indice de tableaux commence à 1 avec PostgreSQL. (voir ici paragraphe "8.15.3. Accès aux tableaux")
    Donc, dès le premier pas il obtient null (ou une exception) et il n'exécutera ni le contenu du pas ni aucun pas suivant.
    @+

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 202
    Par défaut
    Donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RAISE NOTICE 'v_data_stock=%', v_data_stock[1][1];
    Devrait m'afficher 68 si je prend le 1er élément du 1er tableau de {"{68,3}","{92,1}","{93,7}"}
    Marche pas... La manière de l'écrire n'est pas bonne peut-être ?

  4. #4
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Donne le code de la fonction tel que tu l'as réécris et dit nous ce qui se passe réellement. "Marche pas ..." n'est pas suffisant pour comprendre le problème!
    @+

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 202
    Par défaut
    Oui, avec le code c'est mieux :-)
    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
    CREATE OR REPLACE FUNCTION test.stock(p_id_article INTEGER) RETURNS VOID AS $$
    DECLARE
        v_data_stock TEXT[];
        i            SMALLINT;
        v_id_stock   INTEGER;
        v_quantite   INTEGER;
    BEGIN
        SELECT test.verif_stock(p_id_article) INTO v_data_stock; -- >> retourne ceci : [0:2]={"{68,3}","{92,1}","{93,7}"}
     
        i = 0;
        WHILE v_data_stock[i] IS NOT NULL LOOP
            v_id_stock = v_data_stock[i][1];
            v_quantite = v_data_stock[i][2];
            RAISE NOTICE 'id_stock=% - quantite_stock=%', v_id_stock, v_quantite;
            i = i + 1;
        END LOOP;
    END;
    $$ LANGUAGE plpgsql;
    Petite explication de ce que je cherche à faire :
    je veux retourner en un tableau tous les articles et leur quantité de la table "article.stock" dont l'id = celui fourni en paramètre.
    avec l'exemple donné j'ai 3 lignes dans la table qui correspondent à l'article :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     id | quantite | id_article 
    ----+----------+------------
     68 |        3 |    4555846
     92 |        1 |    4555846
     93 |        7 |    4555846

  6. #6
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    J'ai demandé à avoir le résultat de la fonction stock(integer)!!! Quand tu l'exécute qu'est ce qu'elle donne ou fait réellement???
    Par ailleurs il faut le code de la fonction verif_stock car je ne comprend le format de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0:2]={"{68,3}","{92,1}","{93,7}"}
    .
    @+

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 13/10/2006, 00h15
  2. Réponses: 7
    Dernier message: 30/05/2006, 11h09
  3. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  4. Ecrire dans un tableau html depuis une fonction js ?
    Par botanica dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 12h48
  5. passage de tableau 2D a une fonction
    Par watashinoitadakimasu dans le forum C
    Réponses: 2
    Dernier message: 11/09/2003, 02h33

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