web-dev-qa-db-fra.com

Obtenir la liste de toutes les tables dans Oracle?

Comment interroger une base de données Oracle pour afficher les noms de toutes les tables qu'elle contient?

1001
vitule
SELECT owner, table_name
  FROM dba_tables

Cela suppose que vous avez accès à la vue du dictionnaire de données DBA_TABLES. Si vous ne disposez pas de ces privilèges mais en avez besoin, vous pouvez demander à l'administrateur de vous donner explicitement des privilèges sur cette table, ou de vous accorder le privilège SELECT ANY DICTIONARY ou le rôle SELECT_CATALOG_ROLE (l'un ou l'autre vous autorisant à interroger des données. dictionnaire table). Bien sûr, vous pouvez vouloir exclure certains schémas tels que SYS et SYSTEM qui contiennent un grand nombre de tables Oracle dont vous ne vous souciez probablement pas.

Sinon, si vous n'avez pas accès à DBA_TABLES, vous pouvez voir toutes les tables auxquelles votre compte a accès via la vue ALL_TABLES:

SELECT owner, table_name
  FROM all_tables

Bien que cela puisse être un sous-ensemble des tables disponibles dans la base de données (ALL_TABLES vous montre les informations pour toutes les tables auxquelles votre utilisateur a été autorisé à accéder). 

Si vous êtes uniquement préoccupé par les tables que vous possédez, et non par celles auxquelles vous avez accès, vous pouvez utiliser USER_TABLES:

SELECT table_name
  FROM user_tables

Puisque USER_TABLES n'a que des informations sur les tables que vous possédez, il n'a pas de colonne OWNER - le propriétaire, par définition, c'est vous.

Oracle propose également un certain nombre de vues du dictionnaire de données héritées - TAB, DICT, TABS et CAT par exemple - qui pourraient être utilisées. En général, je ne suggérerais pas d'utiliser ces vues héritées à moins que vous n'ayez absolument besoin de renvoyer vos scripts dans Oracle 6. Ces vues n'ayant pas été modifiées depuis longtemps, elles ont souvent des problèmes avec les nouveaux types d'objets. Par exemple, les vues TAB et CAT affichent toutes les deux des informations sur les tables situées dans la corbeille de l'utilisateur, tandis que [DBA|ALL|USER]_TABLES les filtre toutes. CAT affiche également des informations sur les journaux de vues matérialisées avec un TABLE_TYPE de "TABLE" qui ne correspond probablement pas à ce que vous voulez vraiment. DICT combine les tables et les synonymes et ne vous dit pas à qui appartient l'objet.

1271
Justin Cave

L'interrogation user_tables et dba_tables n'a pas fonctionné.
Celui-ci a: 

select table_name from all_tables  
169
vitule

Pour aller plus loin, il existe une autre vue appelée cols (all_tab_columns) qui peut être utilisée pour déterminer quelles tables contiennent un nom de colonne donné.

Par exemple:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

pour trouver toutes les tables dont le nom commence par EST et les colonnes contenant CALLREF n'importe où dans leurs noms.

Cela peut aider à déterminer les colonnes que vous souhaitez joindre, par exemple, en fonction des conventions de dénomination des tables et des colonnes.

62
stealth_angoid

Pour une meilleure visualisation avec sqlplus

Si vous utilisez sqlplus, vous voudrez peut-être d'abord configurer quelques paramètres pour une meilleure visualisation si vos colonnes sont mutilées (ces variables ne devraient pas persister après la sortie de votre session sqlplus):

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000

Afficher toutes les tables

Vous pouvez ensuite utiliser quelque chose comme ceci pour voir tous les noms de table:

SELECT table_name, owner, tablespace_name FROM all_tables;

Afficher les tables que vous possédez

Comme @Justin Cave le mentionne, vous pouvez l'utiliser pour afficher uniquement les tables que vous possédez:

SELECT table_name FROM user_tables;

Ne pas oublier les vues

Gardez à l'esprit que certaines "tables" peuvent en réalité être des "vues", vous pouvez donc essayer de lancer quelque chose comme:

SELECT view_name FROM all_views;

Les resultats

Cela devrait donner quelque chose d'assez acceptable, à savoir:

result

46
cwd

Requête simple pour sélectionner les tables de l'utilisateur actuel:

  SELECT table_name FROM user_tables;
21
Israel Margulies
    select object_name from user_objects where object_type='TABLE';

----------------OU------------------

    select * from tab;

----------------OU------------------

    select table_name from user_tables;
17
Harshil

Essayez les vues du dictionnaire de données ci-dessous.

tabs
dba_tables
all_tables
user_tables
14

Il existe 3 datadictinaires pour cela 

DBA_TABLES décrit toutes les tables relationnelles de la base de données.

SELECT owner, table_name
  FROM dba_tables

Description des tables relationnelles accessibles à l'utilisateur

SELECT owner, table_name
  FROM all_tables

USER_TABLES décrit les tables relationnelles détenues par l'utilisateur actuel. Cette vue n'affiche pas la colonnePROPRIÉTAIRE.

SELECT table_name
  FROM user_tables
9
Kamil Ibadov

Essayez de sélectionner dans user_tables , qui répertorie les tables appartenant à l'utilisateur actuel.

8
Eddie Awad

Avec n'importe lequel de ceux-ci, vous pouvez sélectionner:

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM DBA_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';
6
Van Gogh
select * from dba_tables

ne donne toutes les tables de tous les utilisateurs que si l'utilisateur avec lequel vous vous êtes connecté a les privilèges sysdba.

5
praveen2609

Base de données Oracle pour afficher les noms de toutes les tables en utilisant la requête ci-dessous

 SELECT, nom_table FROM_dba_tables; 

 SELECT, nom_table FROM toutes_tables; 

 SELECT nom_table FROM, tables_utilisateur;

vist more: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-Oracle.html

5
Brahmareddy K

Nous pouvons obtenir toutes les tables, y compris les détails des colonnes, à partir de la requête ci-dessous:

SELECT * FROM user_tab_columns;
3
aim_thebest

Y compris les vues:

SELECT owner, table_name as table_view
  FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
  FROM DBA_VIEWS
3
Punnerud

Vous pouvez utiliser Oracle Data Dictionary pour obtenir des informations sur les objets Oracle.

Vous pouvez obtenir une liste de tables de différentes manières:

select * 
from dba_tables

ou par exemple:

select * 
from dba_objects 
where object_type = 'TABLE' 

Ensuite, vous pouvez obtenir des colonnes de table en utilisant le nom de la table:

select * 
from dba_tab_columns

Ensuite, vous pouvez obtenir la liste des dépendances (déclencheurs, vues, etc.):

select * 
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name 

Ensuite, vous pouvez obtenir la source de texte de ces objets:

select * from dba_source

Et vous pouvez utiliser les vues USER ou ALL au lieu de DBA si vous le souhaitez.

3
Slava Babin

Vous trouverez ci-dessous un extrait commenté de requêtes SQL décrivant comment utiliser les options suivantes:

-- need to have select catalog role
SELECT * FROM dba_tables;

-- to see tables of your schema
SELECT * FROM user_tables;

-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;
3
Prashant Mishra

Je n'ai pas trouvé de réponse qui indiquerait d'utiliser 

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

a donc décidé d’ajouter ma version également . Cette vue renvoie en réalité davantage que DBA_TABLES, car elle renvoie également des tables d’objet ( http://docs.Oracle.com/cd/E11882_01/server.112/e40402/statviews_1003 .htm ).

3
Rusty

Une nouvelle fonctionnalité disponible dans SQLcl (qui est une interface de ligne de commande libre pour Oracle Database) est

Tablesalias.

Voici quelques exemples illustrant l'utilisation et les aspects supplémentaires de la fonctionnalité. Commencez par vous connecter à une session sql en ligne (sql.exe sous Windows). Il est recommandé d'entrer cette commande spécifique à sqlcl avant d'exécuter toute autre commande ou requête affichant des données.

SQL> set sqlformat ansiconsole     -- resizes the columns to the width of the 
                                   -- data to save space 

SQL> tables

TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..

Pour savoir à quoi le pseudonyme tables fait référence, vous pouvez simplement utiliser alias list <alias>

SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------

 select table_name "TABLES" from user_tables

Vous n'êtes pas obligé de définir cet alias car il vient par défaut sous SQLcl. Si vous souhaitez répertorier les tables d'un schéma spécifique, en utilisant un nouvel alias défini par l'utilisateur et en transmettant le nom du schéma en tant qu'argument de liaison avec uniquement un ensemble de colonnes affiché, vous pouvez le faire en utilisant

SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;

Ensuite, vous pouvez simplement passer le nom du schéma en argument

SQL> tables_schema HR

OWNER   TABLE_NAME               LAST_ANALYZED
HR      DUMMY1                   18-10-18
HR      YOURTAB2                 16-11-18
HR      YOURTABLE                01-12-18
HR      ID_TABLE                 05-12-18
HR      REGIONS                  26-05-18
HR      LOCATIONS                26-05-18
HR      DEPARTMENTS              26-05-18
HR      JOBS                     26-05-18
HR      EMPLOYEES                12-10-18
..
..

Un alias prédéfini plus sophistiqué est appeléTables2, qui affiche plusieurs autres colonnes.

SQL> tables2

Tables
======
TABLE_NAME                 NUM_ROWS   BLOCKS   UNFORMATTED_SIZE COMPRESSION     INDEX_COUNT   CONSTRAINT_COUNT   PART_COUNT LAST_ANALYZED
AN_IP_TABLE                       0        0                  0 Disabled                  0                  0            0 > Month
PARTTABLE                         0        0                  0                           1                  0            1 > Month
TST2                              0        0                  0 Disabled                  0                  0            0 > Month
TST3                              0        0                  0 Disabled                  0                  0            0 > Month
MANAGE_EMPLYEE                    0        0                  0 Disabled                  0                  0            0 > Month
PRODUCT                           0        0                  0 Disabled                  0                  0            0 > Month
ALL_TAB_X78EHRYFK                 0        0                  0 Disabled                  0                  0            0 > Month
TBW                               0        0                  0 Disabled                  0                  0            0 > Month
DEPT                              0        0                  0 Disabled                  0                  0            0 > Month

Pour savoir quelle requête est exécutée en arrière-plan, entrez

alias list tables2

Cela vous montrera une requête légèrement plus complexe avec les définitions column prédéfinies communément utilisées dans SQL * Plus.

Jeff Smith explique plus en détail les alias here

2
Kaushik Nayak

En effet, il est possible d’avoir la liste des tables via SQL requêtes.it est possible de le faire également via des outils qui permettent la génération de dictionnaires de données, tels que ERWIN , Toad Data Modeler ou ERBuilder . Avec ces outils, en plus des noms de table, vous aurez des champs, leurs types, des objets tels que (déclencheurs, séquences, domaine, vues ...)

Voici les étapes à suivre pour générer votre définition de tables:

  1. Vous devez procéder au reverse engineering de votre base de données
    • Dans le modélisateur de données Toad: Menu -> Fichier -> Reverse engineering -> Assistant de reverse engineering
    • Dans le modélisateur de données ERBuilder: Menu -> Fichier -> Reverse engineering

Votre base de données sera affichée dans le logiciel sous forme de diagramme Entity Relationship.

  1. Générez votre dictionnaire de données qui contiendra votre définition de tables
    • Dans le modélisateur de données Toad: Menu -> Modèle -> Générer un rapport -> Exécuter
    • Dans le modélisateur de données ERBuilder: Menu -> Outil -> Générer la documentation du modèle
1
parash

Je cherchais à obtenir une liste de tous les noms de colonnes appartenant à une table d'un schéma trié par ordre d'id de colonne.

Voici la requête que j'utilise: -

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
0
Rakesh Narang

La requête suivante ne répertorie que les données requises, alors que les autres réponses me donnaient les données supplémentaires qui ne faisaient que me dérouter.

select table_name from user_tables;
0
Mateen