Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2008, 11h03   #1
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
Par défaut [PLSQL] - Retour d'un select dans un tableau

Bonjour, j'ai la requête suivante dans une procedure stockee Oracle :
Code :
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.
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 11h10   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
http://sheikyerbouti.developpez.com/...age=Chap5#L5.1
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 13h07   #3
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
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+
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 13h28   #4
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 13h38   #5
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
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 ...
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 13h55   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Mais si c'est possible
Code :
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;
Citation:
1 26/06/2008 13:55:01 0
2 27/06/2008 13:55:01 1
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 15h15   #7
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
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.
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 15h24   #8
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
De toute façon je vois toujours un FOR,
le but c'était de ne pas en utiliser...
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 15h27   #9
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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 ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 15h28   #10
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
Exact j'avais mal regarde.
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 15h42   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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 :
1
2
3
4
    BULK COLLECT INTO tontableau
     FROM
     (
tarequete       );
c'est quand même pas insurmontable à comprendre
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 15h54   #12
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
Merci vraiment beaucoup.
Ça marche nickel en fait. Quel mauvais cet expert Oracle haha
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 17h42   #13
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Faut lui dire de se mettre à jour à ton "expert"
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 15h29   #14
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
en fait il avait juste oublier cette solution
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h51.


 
 
 
 
Partenaires

Hébergement Web