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 :

Requête sur plusieurs tables avec un nombre de champs différent


Sujet :

SQL Oracle

Vue hybride

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Par défaut Requête sur plusieurs tables avec un nombre de champs différent
    Bonjour,
    Je souhaite faire une requête (sur une base Oracle) qui me remonterai le nom des fichiers de contrôle, des fichiers de données, des fichiers Redo Log, ..., et tout ça regroupés par tablespace (ou type pour les fichiers de contrôle), un peu comme l'exemple ci-dessous :
    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
    Nom                               Nom                                                     Taille Arch  Increment Maximum
    Tablespace ORACLE    Statut       Fichier OS                                                  MB Auto         MB      MB
    -------------------- ------------ ------------------------------------------------------ ------- ---- ---------- -------
    CONTROL FILES                     /u02/oracle/ORCL/oradata/control_01.ctl                                            
                                      /u02/oracle/ORCL/oradata/control_02.ctl                                            
    REDO LOG FILES                                                                                                          
     1_1                 INACTIVE     /u02/oracle/ORCL/oradata/redo_01.log                    128 NO                     
     2_1                 CURRENT      /u02/oracle/ORCL/oradata/redo_02.log                    128 NO                     
     3_1                 INACTIVE     /u02/oracle/ORCL/oradata/redo_03.log                    128 NO                     
    DATA FILES                                                                                                              
     ADM_DATA            AVAILABLE    /u02/oracle/ORCL/oradata/adm_data_01.dbf                512 NO            0       0
     ADM_INDEX           AVAILABLE    /u02/oracle/ORCL/oradata/adm_index_01.dbf               128 NO            0       0
     COMPTA_DATA         AVAILABLE    /u02/oracle/ORCL/oradata/compta_data_01.dbf            2048 NO            0       0
                         AVAILABLE    /u02/oracle/ORCL/oradata/compta_data_02.dbf            2048 NO            0       0
                         AVAILABLE    /u02/oracle/ORCL/oradata/compta_data_03.dbf            2048 NO            0       0
     COMPTA_INDEX        AVAILABLE    /u02/oracle/ORCL/oradata/compta_index_01.dbf           2048 NO            0       0
                         AVAILABLE    /u02/oracle/ORCL/oradata/compta_index_02.dbf           2048 NO            0       0
                         AVAILABLE    /u02/oracle/ORCL/oradata/compta_index_03.dbf           1024 NO            0       0
     DAS2_DATA           AVAILABLE    /u02/oracle/ORCL/oradata/das2_data_01.dbf               100 NO            0       0
     DAS2_INDEX          AVAILABLE    /u02/oracle/ORCL/oradata/das2_index_01.dbf              100 NO            0       0
     SYSTEM              AVAILABLE    /u02/oracle/ORCL/oradata/system_01.dbf                  256 YES         128    2048
     UNDOTBS1            AVAILABLE    /u02/oracle/ORCL/oradata/undotbs1_01.dbf                768 YES         128    2048
     USERS               AVAILABLE    /u02/oracle/ORCL/oradata/users01.dbf                     32 YES          32    2048
     TEMP                AVAILABLE    /u02/oracle/ORCL/oradata/temp_01.dbf                    256 YES         128    2048
    ********************                                                                     -------
    Je sais comment faire individuellement mais le regroupement me pose problème.
    Merci pour votre aide.

  2. #2
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Si j'ai compris, les datafiles tu les veux par tablespace et les redolog par type de fichier redo; et tout ça dans une seule requête?

    J'ai bien peur que ce ne soit possible.

  3. #3
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    L'opérateur UNION peut peu être aider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select 'control files'as typefile, status, '' as tablespace_name, name as file_name
    from v$controlfile
    UNION
    select 'data files' as typefile, status, tablespace_name, file_name
    from dba_data_files
    UNION
    select 'data files' as typefile, status, tablespace_name, file_name
    from dba_temp_files
    Même si ce n'est pas exactement ce que tu cherches, ça peut te donner des idées qui sait...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Par défaut
    Salut Rvfranck,

    J'avance doucement mais n'ai pas encore la solution finale. Voici le code :
    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
    set linesize 140
    set pagesize 100
     
    column nvl(tablespace_name,'CONTROL_FILE') format a15
    column status          format a10
    column file_name       format a55
     
    break on report
    compute sum label total of bytes on report
     
    select nvl(tablespace_name,'CONTROL_FILE'),
           status,
           file_name,
    	   bytes,
    	   included_in_database_backup,
    	   increment_by,
    	   maxbytes
    from ( select ddf.tablespace_name,
                  ddf.status,
    			  ddf.file_name,
    			  ddf.bytes/(1024*1024) bytes,
    			  vtbs.included_in_database_backup,
    			  ddf.increment_by,
    			  ddf.maxbytes
    	   from dba_data_files ddf,
    	        v$tablespace vtbs
    	   where ddf.tablespace_name = vtbs.name
    	   union all
    	   select null tablespace_name,
    	          status,
    			  name file_name,
    			  null,
    			  null,
    			  null,
    			  null
           from v$controlfile
    	   union all
    	   select lf.group# || '_' || l.members tablespace_name,
                  l.status,
    			  lf.member file_name,
    			  l.bytes/(1024*1024),
    			  null,
    			  null,
    			  null
          from v$logfile lf,
               v$log l
          where lf.group# = l.group#)
    ;
    Et le résultat (sur une autre base, mais le principe doit être le même) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    NVL(TABLESPACE_ STATUS     FILE_NAME                                                          BYTES INC INCREMENT_BY   MAXBYTES
    --------------- ---------- ------------------------------------------------------- ---------------- --- ------------ ----------
    SYSTEM          AVAILABLE  C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\SYSTEM01.DBF                 300 YES         1280 3,4360E+10
    UNDOTBS1        AVAILABLE  C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\UNDOTBS01.DBF                200 YES          640 3,4360E+10
    SYSAUX          AVAILABLE  C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\SYSAUX01.DBF                 130 YES         1280 3,4360E+10
    USERS           AVAILABLE  C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\USERS01.DBF                    5 YES          160 3,4360E+10
    USERS           AVAILABLE  C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\USERS02.DBF                    5 YES            1 3,4360E+10
    CONTROL_FILE               C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\CONTROL01.CTL
    CONTROL_FILE               C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\CONTROL02.CTL
    1_1             INACTIVE   C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\REDO01.LOG                     5
    2_1             CURRENT    C:\ORACLE\PRODUCT\10.2.0\ORADATA\BOSTON\REDO02.LOG                     5
                                                                                       ----------------
    total                                                                                           650

  5. #5
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Le code suivant ne devrait pas être très loin de ce que tu cherches à obtenir :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    SET LINESIZE 140
    SET PAGESIZE 100
    SET TRIMS ON
     
    COLUMN tablespace_name             FORMAT a20        HEAD "Tablespace ORACLE"
    COLUMN status                      FORMAT a10        HEAD "Statut"
    COLUMN file_name                   FORMAT a55        HEAD "Fichier OS"
    COLUMN bytes                       FORMAT '99990'    HEAD "Taille"
    COLUMN included_in_database_backup FORMAT a4         HEAD "Arch"
    COLUMN increment_by                FORMAT '99999990' HEAD "Increment"
    COLUMN maxbytes                    FORMAT '999990'   HEAD "Maximum"
     
    BREAK ON REPORT
    COMPUTE SUM LABEL "Total" OF bytes ON REPORT
     
    SELECT tablespace_name,
           STATUS,
           file_name,
    	   ROUND (bytes/(1024*1024), 0) bytes,
    	   included_in_database_backup,
    	   ROUND (increment_by/(1024*1024), 0) increment_by,
    	   ROUND (maxbytes/(1024*1024), 0) maxbytes
    FROM ( SELECT '1.0' ordre_tri,
                  'CONTROL FILES' tablespace_name,
                  NULL status,
    			  NULL file_name,
    			  NULL bytes,
    			  NULL included_in_database_backup,
    			  NULL increment_by,
    			  NULL maxbytes
          FROM dual
          UNION ALL
    	   SELECT '1.1' ordre_tri,
                  NULL tablespace_name,
    	          status,
    			  name file_name,
    			  NULL bytes,
    			  NULL included_in_database_backup,
    			  NULL increment_by,
    			  NULL maxbytes
           FROM v$controlfile
    	   UNION ALL
    	   SELECT '2.0' ordre_tri,
                  'REDO LOG FILES' tablespace_name,
                  NULL status,
    			  NULL file_name,
    			  NULL bytes,
    			  NULL included_in_database_backup,
    			  NULL increment_by,
    			  NULL maxbytes
          FROM dual
          UNION ALL
    	   SELECT '2.1' ordre_tri,
                  ' ' || lf.group# || '_' || l.members tablespace_name,
                  l.status,
    			  lf.member file_name,
    			  l.bytes bytes,
    			  NULL included_in_database_backup,
    			  NULL increment_by,
    			  NULL maxbytes
          FROM v$logfile lf,
               v$log l
          WHERE lf.group# = l.group#
          UNION ALL
    	   SELECT '3.0' ordre_tri,
                  'DATA FILES' tablespace_name,
                  NULL status,
    			  NULL file_name,
    			  NULL bytes,
    			  NULL included_in_database_backup,
    			  NULL increment_by,
    			  NULL maxbytes
          FROM dual
          UNION ALL
          SELECT '3.1' ordre_tri,
                  ' ' || ddf.tablespace_name,
                  ddf.status,
    			  ddf.file_name,
    			  ddf.bytes bytes,
    			  vtbs.included_in_database_backup,
    			  ddf.increment_by,
    			  ddf.maxbytes
    	   FROM dba_data_files ddf,
    	        v$tablespace vtbs
    	   WHERE ddf.tablespace_name = vtbs.name
    	   )
    ORDER BY ordre_tri, tablespace_name, file_name
    ;

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Par défaut
    Merci Xdescamp,

    Ca correspond effectivement à ce que je veux faire. Peux tu m'indiquer à quoi correspondent des lignes (je n'ai jamais vu ce type de construction) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT '1.0' ordre_tri,
    SELECT '1.1' ordre_tri,
    .
    .
    SELECT '2.1' ordre_tri
    Merci pour ton aide.

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

Discussions similaires

  1. Requête sur plusieurs tables avec plusieurs WHERE
    Par zengarden dans le forum Requêtes
    Réponses: 16
    Dernier message: 18/03/2015, 10h01
  2. Réponses: 4
    Dernier message: 07/07/2011, 08h51
  3. Réponses: 1
    Dernier message: 25/04/2009, 11h31
  4. Requête sur plusieurs tables avec DLookup ?
    Par Falcdyr dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/05/2008, 08h50
  5. Requête sur plusieurs tables
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 12h25

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