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 :

Compter le nombre d'enregistrements d'une même table pour différents utilisateurs


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut Compter le nombre d'enregistrements d'une même table pour différents utilisateurs
    Bonjour,

    Sur ma base Oracle, j'ai plusieurs utilisateurs qui disposent de la même table.
    A partir de system, je voudrais compter le nombre d'enregistrements de cette table par utilisateur.

    J'ai donc fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT UPPER(owner) AS name, num_rows FROM dba_tables WHERE UPPER(table_name) = 'ma_table'
    Le souci c'est que num_rows ne correspond pas toujours (exemple me retourne NULL alors que j'ai une centaine d'enregistrement).
    J'ai lu dans la FAQ, qu'il fallait se méfier de cette valeur retournée.

    Quelle requête je pourrais faire (avec un count) pour avoir une valeur exacte (et sans attendre le lendemain que num_rows soit mis à jour).

    Merci

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    j'essaie d'appliquer à dba_tables, mais rien ne marche

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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
    22
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> select owner,
      2      table_name,
      3      to_number(
      4        extractvalue(
      5          xmltype(
      6   dbms_xmlgen.getxml('select count(*) c from '||owner||'.'||table_name))
      7          ,'/ROWSET/ROW/C')) count
      8    from dba_tables
      9   Where table_name = 'EMPLOYEES'
     10  /
     
    OWNER                          TABLE_NAME                          COUNT
    ------------------------------ ------------------------------ ----------
    HR                             EMPLOYEES                             107
    MNI                            EMPLOYEES                             107
     
    SQL>

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    Il me manquait le owner dans ma requete.
    Merci beaucoup

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Bref c’est une méthode pour le forum ou pour une requête ad-hoc. Mais pour la prod utilisez une bonne procédure PL/SQL pipelined avec du sql dynamique natif.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    J'avoue ne pas avoir tous compris

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Si je devrais intégrer ce type de requête dans une application alors j’utiliserai une procédure pipelined avec du sql dynamique natif pour obtenir le (même) résultat.

    Par contre pour passer une requête ad-hoc qui montrera le nombre des enregistrements de la même table sur de schéma différente ce type de requête est très utile.

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    OK, merci, je vais regarder du côté des procedures sachant qu'effectivement je risque d'avoir besoin de cette procedure pour d'autres utilisateurs

  10. #10
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Voilà un exemple
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> Create Or replace Type cptTable As Object (
      2    schema          Varchar2(30),
      3    nom             Varchar2(30),
      4    nbrEnreg        Number(10)
      5  )
      6  /
     
    Type created
    SQL> Create Or replace Type cptTable_nt As Table Of  cptTable
      2  /
     
    Type created
    SQL> Create Or Replace Function Cpt_Enreg (
      2    nom_table       In Varchar2
      3  ) Return cptTable_nt Pipelined Is
      4    c_model constant Varchar2(100) := 'Select Count(*) From #owner#.#tab#';
      5    l_sql            Varchar2(100);
      6    l_cpt            Number(10);
      7  Begin
      8    --
      9    l_sql := Replace(c_model,'#tab#',Dbms_Assert.SIMPLE_SQL_NAME(nom_table));
     10    --
     11    For rec In (Select t.owner
     12                  From all_tables t
     13                 Where t.table_name = nom_table
     14               )
     15    Loop
     16      Execute Immediate Replace(l_sql,'#owner#',rec.owner) Into l_Cpt;
     17      --
     18      Pipe row(cptTable(rec.owner, nom_table, l_cpt));
     19      --
     20    End Loop ;
     21  End;
     22  /
     
    Function created
    SQL> Select * from Table(Cpt_Enreg('EMPLOYEES'))
      2  /
     
    SCHEMA                         NOM                              NBRENREG
    ------------------------------ ------------------------------ ----------
    HR                             EMPLOYEES                             107
    MNI                            EMPLOYEES                             107
     
    SQL>

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    Génial, merci encore

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

Discussions similaires

  1. [AC-2003] Compter le nombre d'enregistrements dans une sous table
    Par buzuck20 dans le forum Access
    Réponses: 6
    Dernier message: 17/12/2015, 13h24
  2. Compter le nombre d'enregistrements dans une table
    Par youhibadelphi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/06/2009, 20h30
  3. Réponses: 4
    Dernier message: 24/11/2008, 09h43
  4. Compter le nombre d'enregistrement dans une table selon un critere
    Par Angelo91 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 18/08/2008, 12h05
  5. Réponses: 2
    Dernier message: 27/03/2007, 22h15

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