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

PL/SQL Oracle Discussion :

Select imbriqué avec loop


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 34
    Points : 39
    Points
    39
    Par défaut Select imbriqué avec loop
    Bonjour, j'aimerais sortir, pour chaque usager d'une base de donnes le nombre d'objet lui appartenant. Pour ce faire j'ai construit cette requête :

    begin
    for i in (select username from all_users)
    loop
    dbms_output.put_line(i.username);
    select count(*) from dba_objects where owner = i.username;
    end loop;
    end;

    Le problème c'est que ça ne fonctionne pas et ça me retourne l'erreur suivante :

    ERROR at line 5:
    ORA-06550: line 5, column 7:
    PLS-00428: an INTO clause is expected in this SELECT statement

    Comme vous le remarquerez surement, je viens du monde de l'administration de système et mes compétences de scripting sont ceux du shell, batch, perl et autre et donc ma logique ne semble pas conforme à celle d'oracle

    J'aimerais bien que quelqu'un m'éclaire! Je suis en train d'essayer d'obtenir le résultat voulu avec des "union" mais jusqu'à présent, niet, nothing, capoute

    Merci de votre aide.

    William

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 34
    Points : 39
    Points
    39
    Par défaut
    Bon, j'ai évolué dans ma commande voici ce que j'ai pondu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select t1.username, t2.object_name
    from all_users t1, dba_objects t2
    where t1.username = t2.owner and username = 'SCOTT'
    Bon, j'ai ajouté parce que je vous dis pas la longueur de la réponse!

    Maintenant, il suffit de remplacer l'affichage des noms d'objets par le nombre de ces derniers! Là, ça se complique!

  3. #3
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonsoir

    tu peux faire

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select owner, count(*) from dba_objects
    group by owner

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 34
    Points : 39
    Points
    39
    Par défaut
    Bonjour Fatsora,
    je m'en venais justement posté quelque chose qui ressemble à ce que tu viens tout juste de posté soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select t1.username, count(*)
    from all_users t1, dba_objects t2
    where t1.username = t2.owner group by t1.username
    Mais le problème avec ma requête comme avec la tienne c'est qu'il ne me retourne pas les "shémas" qui ont 0 object et qui sont donc que de simple usager et j'ai besoin de connaître les deux.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Il faut utiliser une jointure externe pour conserver les élements de t1 non présent dans t2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t1.username, count(*)
    FROM all_users t1
    LEFT JOIN dba_objects t2 ON t1.username = t2.owner
    GROUP BY t1.username

  6. #6
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Il faut utiliser une jointure externe pour conserver les élements de t1 non présent dans t2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t1.username, count(*)
    FROM all_users t1
    LEFT JOIN dba_objects t2 ON t1.username = t2.owner
    GROUP BY t1.username
    Bonjour,

    C'est plutot ca qu'il faut faire ....
    avec le script ci-dessus le schema ANONYMOUS renvoie 1 alors qu'il n'a aucun objet

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select username ,count(object_name) 
    from all_users u
      left outer join dba_objects o
    on u.username=o.owner
    group by username 
     
    ;

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 34
    Points : 39
    Points
    39
    Par défaut
    Merci à vous tous, je me rend bien compte que ma logique "script" n'est pas adapté au SQL ou c'est le contraire

    Anyway, je vous remercie bien bas, le résultat correspond exactement à ce que je voulais.

    À la prochaine.


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

Discussions similaires

  1. [AJAX] Select imbriqué avec Ajax
    Par anissa2 dans le forum AJAX
    Réponses: 1
    Dernier message: 22/04/2013, 19h09
  2. Requête SELECT imbriquée avec top ACCESS
    Par blind229 dans le forum Langage SQL
    Réponses: 0
    Dernier message: 12/07/2012, 20h32
  3. Select imbriqué avec agrégat
    Par SASARITA dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/04/2012, 16h06
  4. Select imbriqué avec plusieurs colonne
    Par rad_hass dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2008, 10h48
  5. [PLSQL] select imbriqué avec clause (+)
    Par pullin dans le forum Oracle
    Réponses: 4
    Dernier message: 03/05/2006, 11h07

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