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

SQL Oracle Discussion :

[PLSQL] - Retour d'un select dans un tableau


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut [PLSQL] - Retour d'un select dans un tableau
    Bonjour, j'ai la requête suivante dans une procedure stockee Oracle :
    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
     
        SELECT DISTINCT
        SMGSUPPLYZONE.SUPPLYZONENAME,
        SMGSOURCE.SOURCENAME,
        SMGSOURCE.UIDSOURCE INTO tVSTAB_ZONEORIGINE
    FROM
        SMGSUPPLYZONE SMGSUPPLYZONE, 
        SMGSUPZONESRCE SMGSUPZONESRCE, 
        SMGSOURCE SMGSOURCE,
        SMGSZNETCONF SMGSZNETCONF,
        SMGSUPZONESECTION SMGSUPZONESECTION,
        SMGSECTION SMGSECTION
    WHERE 
        SMGSUPPLYZONE.UIDSUPPLYZONE = I_VSINT_ORIGINEID
        AND (SMGSZNETCONF.UIDSUPPLYZONE = I_VSINT_ORIGINEID)
        AND (SMGSOURCE.UIDSOURCE = SMGSUPZONESRCE.UIDSOURCE)
        AND (SMGSZNETCONF.UIDSZNETCONF = SMGSUPZONESRCE.UIDSZNETCONF)
        AND (SMGSECTION.UIDSECTION = SMGSUPZONESECTION.UIDSECTION)
        AND (SMGSUPZONESECTION.UIDSZNETCONF = SMGSZNETCONF.UIDSZNETCONF);
    Et je voudrai savoir comment on sauvegarde dans ma variable tVSTAB_ZONEORIGINE les donnees retournees par le Select.
    Comment dois-je la declarer ? sachant que les 3 colonnes que je recupere sont de type : VARCHAR2, NUMBER, NUMBER

    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    Salut,

    J'ai demande a un expert Oracle qui m'a dit que ce n'était pas possible de retourner le résultat de mon Select dans un tableau directement, parce qu'en plsql il ne sait pas traiter directement le multiligne.
    Et donc je dois passer par un curseur et une boucle, et remplir mon tableau dans cette boucle.

    A+

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Votre expert Oracle a tord depuis la version 8i car vous pouvez au moins retourner le résultat d'un SELECT dans plusieurs tableaux (1 tableau par colonne) en une seule opération FETCH.

    Il suffit d'utiliser la clause BULK COLLECT de l'instruction FETCH.

    Et vous pouvez aussi retourner un résultat dans un seul tableau.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    J'ai bien dit que je voulais retourner le résultat de mon SELECT directement dans un tableau.

    Avec ta solution c'est possible ?

    Non, il faut faire une boucle ...

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Mais si c'est possible
    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
    DECLARE
     TYPE REC_STOCK IS RECORD(DATE_CDE DATE, QTE NUMBER);
    	TYPE TAB_STOCK IS TABLE OF REC_STOCK	  INDEX BY BINARY_INTEGER;   
    	T_STOCK TAB_STOCK;
     BEGIN
        SELECT d, q
        BULK COLLECT INTO t_stock
         FROM
         (
           SELECT SYSDATE d, 0 q FROM dual
           UNION ALL
           SELECT SYSDATE +1, 1 FROM dual
           );
        IF t_stock.LAST IS NOT NULL
        THEN
          FOR i IN t_stock.FIRST .. t_stock.LAST
          LOOP
            DBMS_OUTPUT.PUT_LINE(i ||' '||TO_CHAR(t_stock(i).date_cde, 'DD/MM/RRRR HH24:MI:SS') || ' '|| t_stock(i).qte);
          END LOOP;
        END IF;
     END;
    1 26/06/2008 13:55:01 0
    2 27/06/2008 13:55:01 1

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    Salut,

    Merci pour cet exemple mais j'ai rien compris. Peux faire cet exemple avec ma requete qui est dans mon 1er post, ca serait vraiment plus clair pour moi.
    Merci.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    De toute façon je vois toujours un FOR,
    le but c'était de ne pas en utiliser...

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par toxycyty Voir le message
    De toute façon je vois toujours un FOR,
    le but c'était de ne pas en utiliser...
    le FOR ne sert qu'à parcourir le tableau... tu veux faire comment pour parcourir le tableau sans FOR ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    Exact j'avais mal regarde.

  11. #11
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par toxycyty Voir le message
    Salut,

    Merci pour cet exemple mais j'ai rien compris. Peux faire cet exemple avec ma requete qui est dans mon 1er post, ca serait vraiment plus clair pour moi.
    Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        BULK COLLECT INTO tontableau
         FROM
         (
    tarequete       );
    c'est quand même pas insurmontable à comprendre

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    Merci vraiment beaucoup.
    Ça marche nickel en fait. Quel mauvais cet expert Oracle haha

  13. #13
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Faut lui dire de se mettre à jour à ton "expert"

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    en fait il avait juste oublier cette solution

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

Discussions similaires

  1. [MySQL] probleme avec le retour d'une selection dans une base de donnees
    Par sovo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/02/2010, 18h00
  2. Mettre le résultat d'un select dans un tableau
    Par adham84 dans le forum SQL
    Réponses: 3
    Dernier message: 24/04/2008, 12h51
  3. Selection dans un Tableau
    Par Nikk0 dans le forum Eclipse Platform
    Réponses: 10
    Dernier message: 20/03/2007, 09h30
  4. [SWT] Retour a la ligne dans un tableau
    Par kivan_ dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 19/03/2006, 16h28
  5. [sgbd] Recuperer valeurs d'un Select dans un tableau
    Par Mu_Belier dans le forum SGBD
    Réponses: 16
    Dernier message: 27/05/2005, 15h46

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