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 :

[Oracle10g] SELECT FROM une liste


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 45
    Par défaut [Oracle10g] SELECT FROM une liste
    Bonjour,

    Je cherchais à réaliser une opération qui me paraissait tout simple en PL/SQL, jusqu'à me rendre compte que ça n'existe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FOR i IN ('A', 'B', 'C', 'D') LOOP
    ...
    END LOOP
    En gros je cherche à réaliser une boucle FOR sur une liste quelconque.
    Je trouve ça tellement gros que je rate surement quelque chose de simple.

    Merci de vos lumières

  2. #2
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Bonjour,

    de mémoire ce n'est pas possible en PL/SQL. Autant il gère bien le "for i in a...b" autant il ne permet pas de déclarer des listes de valeurs dans le for.

    Par contre tu dois pouvoir t'en sortir avec des collections :
    * Les collections de type VARRAY

    Ce type de collection possède une dimension maximale qui doit être précisée lors de sa déclaration
    Elle possède une longueur fixe et donc la suppression d'éléments ne permet pas de gagner de place en mémoire
    Ses éléments sont numérotés à partir de la valeur 1

    Déclaration d'une collection de type VARRAY
    TYPE nom type IS VARRAY (taille maximum) OF type élément [NOT NULL] ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> declare
      2    -- collection de type VARRAY
      3    TYPE TYP_VAR_TAB is VARRAY(30) of varchar2(100) ;
      4    tab1 TYP_VAR_TAB := TYP_VAR_TAB('','','','','','','','','','');
      5  Begin
      6    for i in 1..10 loop
      7       tab1(i):= to_char(i) ;
      8    end loop ;
      9  End;
     10  /
     
    Procédure PL/SQL terminée avec succès.
    Déclaration d'un tableau VARRAY de 30 éléments de type varchar2(100)

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 50
    Par défaut
    VARRAY ou bien des collections de type NESTED TABLE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    declare
       type t_tabchar is table of varchar2(100);
       tableau   t_tabchar := t_tabchar('A', 'B', 'C', 'D');
    begin
       for i in tableau.first..tableau.last
       loop
          dbms_output.put_line('element '||i||' = '||tableau(i));
       end loop;
    end;

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 45
    Par défaut
    Effectivement, j'avais contourné le problème avec un tableau, mais je ne savais pas qu'on pouvait l'initialiser directement comme dans vos solutions.
    J'espérais une solution plus simple, je suis en fait surpris que ça ne soit pas possible directement en PL/SQL.
    Merci pour vos réponses.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Vous pouvez aussi utiliser un curseur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    BEGIN
       FOR cur IN (SELECT 'A' col FROM DUAL UNION ALL
                   SELECT 'B' FROM DUAL UNION ALL
                   SELECT 'C' FROM DUAL UNION ALL
                   SELECT 'D' FROM DUAL)
       LOOP
          DBMS_OUTPUT.put_line (cur.col);
       END LOOP;
    END;
    /

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

Discussions similaires

  1. probleme de selection dans une liste deroulant
    Par biboulou dans le forum IHM
    Réponses: 5
    Dernier message: 04/05/2006, 12h16
  2. [Onchange] sur checkbox selection ds une liste deroulante
    Par maxxou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/01/2006, 00h17
  3. [Selected]Dans une liste déroulante
    Par ozzmax dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/11/2005, 19h18
  4. Réponses: 14
    Dernier message: 29/04/2005, 11h59
  5. Réponses: 8
    Dernier message: 05/05/2004, 16h28

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