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

Administration Oracle Discussion :

oracle lister les tables d'un user et le nombre de lignes associées


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 58
    Par défaut oracle lister les tables d'un user et le nombre de lignes associées
    Bonjour,

    Je cherche à faire une requête très simple, mais j'ai l'impression que c'est si simple que je ne trouve pas l'astuce...

    Je voudrais trier/lister les tables d'un utilisateur avec pour chaque table, afficher le nombre de lignes associées.

    J'ai beau regarder les tutoriels, forums, je n'arrive pas à trouver la méthode... (j'avais pensé à un curseur, à 2 select imbriqués...)

    voici une ébauche de requête, à mon avis, il y a plus simple et plus efficace..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select liste_table.nom_table, count(*) 
      from ( select table_name nom_table from dba_tables where owner='XXX') 
       liste_table
     group by liste_table.nom_table order by liste_table.nom_table asc;
    J'ai peur d'être un peu ridicule, mais vraiment, je ne vois pas comment faire...

    Merci d'avance...

  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
    Ce n'est pas évident du tout en fait.

    C'est pour quoi faire ? Tu as besoin du nombre EXACT de lignes ?

    Sinon tu peux te baser sur les statistiques (si elles sont à jour). Si je devais faire ça, je passerais par du PL/SQL je pense (donc pas par un select tout simple).

  3. #3
    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
    Si les stats sont en compute (100% des lignes analysées)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT table_name, num_rows
    FROM all_tables
    WHERE owner = 'XXX
    Sinon EXECUTE IMMEDIATE.

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE FUNCTION F_NUMROW(p_table IN VARCHAR2) RETURN NUMBER
    IS
    	v_retour NUMBER;
    BEGIN
    	EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || p_table INTO v_retour;
    	RETURN v_retour;
    END;
     
    SELECT table_name, num_rows, F_NUMROW(table_name)
    FROM all_tables
    WHERE owner = 'XXX'

  5. #5
    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
    Attention cependant aux droits nécessaires en PL/SQL. Personnellement ça fait 1/2h que j'essaye de m'attribuer correctement les droits pour pouvoir montrer les résultats d'une fonction proche de celle de McM.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 58
    Par défaut
    bonjour,

    La requete est pour lister un certain nombre d'information faisant suite à un chargement massif de données dans ma base:
    il me faudrait, par nom d'utilisateur, les objets ainsi que le nombre d'extents, la taille de l'extent, le tbs où est stocké l'objet, sa taille, et le nombre de lignes de l'objet si celui si est une table...

    j'ai pu lister tout sauf le nombre de lignes dans chaque table, sachant que mon boss voudrait ça dans le même tableau...
    Je ne peux donc pas utiliser les stats, car c'est une étude à faire ponctuellement, après différents chargement, afin de vérifier que les tablespaces ont été définis avec le bon extent.

    Je vais essayer de mon coté avec la fonction...

    je vous mets ma requête en fin de message (sachant qu'il n'y a pas le nb de lignes)

    Merci d'avance,


    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
    col schema for A10
     col nom_objet for A30
     col type_objet for A10
     col nom_TBS for A20
     set pagesize 50
     set linesize 150
     
     
    select schema, nom_objet, type_objet, nom_TBS, taille_extent, taille_tot_TBS/1024/1024/1024 taille_TBS_Go, nb_extent from 
    	(select e.owner schema, e.segment_name nom_objet, e.segment_type type_objet, e.tablespace_name nom_TBS, t.next_extent taille_extent, count(e.owner) nb_extent 
    	from dba_extents e, dba_tablespaces t
    	where e.owner='XXX' and t.tablespace_name=e.tablespace_name 
    	group by e.segment_name, e.owner, e.segment_type, e.tablespace_name, t.next_extent) 
    extents,
    	(select tablespace_name,sum(bytes) taille_tot_TBS from dba_data_files
    	group by tablespace_name) tailleTBS
    where extents.nom_TBS(+) = tailleTBS.tablespace_name and schema is not null order by extents.nb_extent asc;

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il suffit de se connecter avec le user owner des tables et faire un count(*).

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 58
    Par défaut
    ma requete mixée avec l'appel de la fonction fait exactement ce que je voulais...

    Pourquoi n'y ai-je pas pensé avant???

    Merci encore...
    Je clos la discussion.

    Si vous voulez mon bout de code:

    fonction qui va récupérer le nombre de lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE FUNCTION F_NUMROW(p_table IN VARCHAR2) RETURN NUMBER
    IS
            v_retour NUMBER;
    BEGIN
            EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || p_table INTO v_retour;
            RETURN v_retour;
    END;
     
    /
    script principal qui crée la fonction, fait la requete, et drop la fonction:
    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
     col schema for A10
     col nom_objet for A30
     col type_objet for A10
     col nom_TBS for A20
     set pagesize 50
     set linesize 250
     
     
    @./compile/volumetrie/cr_f_numrow.sql
     
    select schema, nom_objet, type_objet, nom_TBS, taille_extent, taille_tot_TBS/1024/1024/1024 taille_TBS_Go, nb_extent, f_numrow(nom_objet) nb_lignes
    from 
    	(select e.owner schema, e.segment_name nom_objet, e.segment_type type_objet, 	e.tablespace_name nom_TBS, t.next_extent taille_extent, count(e.owner) nb_extent 
    	from dba_extents e, dba_tablespaces t
    	where e.owner='XXX' and t.tablespace_name=e.tablespace_name 
    	group by e.segment_name, e.owner, e.segment_type, e.tablespace_name, t.next_extent) extents,
    	(select tablespace_name,sum(bytes) taille_tot_TBS from dba_data_files
    	group by tablespace_name) tailleTBS
    where extents.nom_TBS(+) = tailleTBS.tablespace_name
    and schema is not null
    and type_objet='TABLE'
    order by extents.nb_extent asc;
     
     
    @./compile/volumetrie/drop_f_numrow.sql

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

Discussions similaires

  1. Lister les tables
    Par chahi dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 13/01/2009, 12h58
  2. [Debutant] Lister les tables d'une base de données
    Par Konrad Florczak dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/07/2005, 16h24
  3. Lister les tables d'une base
    Par pg_user dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/05/2005, 10h41
  4. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46
  5. Lister les tables d'une Base
    Par YanK dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 08/10/2003, 10h40

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