Comment interroger une base de données Oracle pour afficher les noms de toutes les tables qu'elle contient?
Comment interroger une base de données Oracle pour afficher les noms de toutes les tables qu'elle contient?
Réponses:
SELECT owner, table_name
FROM dba_tables
Cela suppose que vous avez accès à la DBA_TABLES
vue du dictionnaire de données. Si vous ne disposez pas de ces privilèges mais en avez besoin, vous pouvez demander que le DBA vous accorde explicitement des privilèges sur cette table, ou que le DBA vous accorde le SELECT ANY DICTIONARY
privilège ou le SELECT_CATALOG_ROLE
rôle ( l' un ou l' autre vous permettant d'interroger n'importe quelle table de dictionnaire de données ). Bien sûr, vous voudrez peut-être exclure certains schémas comme SYS
et SYSTEM
qui ont un grand nombre de tables Oracle dont vous ne vous souciez probablement pas.
Alternativement, si vous n'y avez pas accès DBA_TABLES
, vous pouvez voir toutes les tables auxquelles votre compte a accès via la ALL_TABLES
vue:
SELECT owner, table_name
FROM all_tables
Cependant, cela peut ê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 ne vous préoccupez que des tables que vous possédez, pas de celles auxquelles vous avez accès, vous pouvez utiliser USER_TABLES
:
SELECT table_name
FROM user_tables
Puisqu'il USER_TABLES
ne contient que des informations sur les tables que vous possédez, il n'a pas de OWNER
colonne - le propriétaire, par définition, c'est vous.
Oracle a également un certain nombre de données existantes dictionnaire views-- TAB
, DICT
, TABS
et CAT
pour exemple-- qui pourrait être utilisé. En général, je ne suggérerais pas d'utiliser ces vues héritées, sauf si vous devez absolument rétroporter vos scripts vers Oracle 6. Oracle n'a pas modifié ces vues depuis longtemps, de sorte qu'ils ont souvent des problèmes avec les nouveaux types d'objets. Par exemple, les TAB
et CAT
points de vue à la fois d'information montrent sur les tables qui se trouvent dans la corbeille de l'utilisateur tandis que les [DBA|ALL|USER]_TABLES
vues tous les filtres out. CAT
affiche également des informations sur les journaux de vues matérialisées avec un TABLE_TYPE
"TABLE" qui ne correspond probablement pas à ce que vous voulez vraiment. DICT
combine des tableaux et des synonymes et ne vous dit pas à qui appartient l'objet.
Requête user_tables
et dba_tables
n'a pas fonctionné.
Celui-ci a fait:
select table_name from all_tables
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 rechercher toutes les tables dont le nom commence par EST et les colonnes contenant CALLREF n'importe où dans leur nom.
Cela peut vous aider lors de l'élaboration des colonnes sur lesquelles vous souhaitez vous joindre, par exemple, en fonction de vos conventions de dénomination de table et de colonne.
select * from cols
et obtenu 0 lignes retournées.
sqlplus
Si vous utilisez, sqlplus
vous voudrez peut-être d'abord configurer quelques paramètres pour une meilleure visualisation si vos colonnes sont déformées (ces variables ne devraient pas persister après avoir quitté votre sqlplus
session):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
Vous pouvez ensuite utiliser quelque chose comme ceci pour voir tous les noms de table:
SELECT table_name, owner, tablespace_name FROM all_tables;
Comme le mentionne @Justin Cave, vous pouvez l'utiliser pour afficher uniquement les tables dont vous êtes propriétaire:
SELECT table_name FROM user_tables;
Gardez à l'esprit que certaines "tables" peuvent en fait être des "vues", vous pouvez donc également essayer d'exécuter quelque chose comme:
SELECT view_name FROM all_views;
Cela devrait produire quelque chose qui semble assez acceptable comme:
pagesize 30
avec pagesize 1000
?
Requête simple pour sélectionner les tables de l'utilisateur actuel:
SELECT table_name FROM user_tables;
Essayez les vues du dictionnaire de données ci-dessous.
tabs
dba_tables
all_tables
user_tables
Essayez de sélectionner parmi user_tables qui répertorie les tables appartenant à l'utilisateur actuel.
Base de données Oracle pour afficher les noms de toutes les tables à l'aide de la requête ci-dessous
SELECT propriétaire, table_name FROM dba_tables; SELECT propriétaire, table_name FROM all_tables; SELECT nom_table FROM tables_utilisateur;
visitez plus: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
donne toutes les tables de tous les utilisateurs uniquement si l'utilisateur avec lequel vous vous êtes connecté a les sysdba
privilèges.
Je n'ai pas trouvé de réponse qui indiquerait à utiliser
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
J'ai donc décidé d'ajouter ma version également. Cette vue renvoie en fait plus que DBA_TABLES car elle renvoie également des tables d'objets ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
Vous pouvez utiliser Oracle Data Dictionary pour obtenir des informations sur les objets Oracle.
Vous pouvez obtenir la liste des tableaux 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 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 USER
ou des ALL
vues au lieu de DBA
si vous le souhaitez.
Nous pouvons obtenir tous les tableaux, y compris les détails des colonnes de la requête ci-dessous:
SELECT * FROM user_tab_columns;
Vous trouverez ci-dessous un extrait commenté de requêtes SQL décrivant comment vous pouvez utiliser les options:
-- 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;
Une nouvelle fonctionnalité disponible dans SQLcl (qui est une interface de ligne de commande gratuite pour Oracle Database) est
Tables
alias.
Voici quelques exemples montrant l'utilisation et les aspects supplémentaires de la fonctionnalité. Tout d'abord, connectez-vous à une session de sql
ligne de commande ( sql.exe
sous Windows). Il est recommandé d'entrer cette commande spécifique sqlcl avant d'exécuter toute autre commande ou requête qui affiche 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 tables
fait référence l' alias, vous pouvez simplement utiliseralias list <alias>
SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------
select table_name "TABLES" from user_tables
Vous n'avez pas besoin 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 passant le nom du schéma comme argument de liaison avec uniquement un ensemble de colonnes affichées, 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 comme 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 il exécute en arrière-plan, entrez
alias list tables2
Cela vous montrera une requête légèrement plus complexe ainsi que des column
définitions prédéfinies couramment utilisées dans SQL * Plus.
Jeff Smith explique plus sur les alias ici
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;
En effet, il est possible d'avoir la liste des tables via SQL queries.it est possible de le faire aussi 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 comme (triggers, séquences, domaine, vues ...)
Ci-dessous les étapes à suivre pour générer votre définition de tables:
Votre base de données sera affichée dans le logiciel sous forme de diagramme de relation d'entité.
select * from all_all_tables
ce «tout» supplémentaire au début donne 3 colonnes supplémentaires qui sont:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
-ce que (comme dans MySQL) fonctionne?