Comment interroger une base de données Oracle pour afficher les noms de toutes les tables qu'elle contient?
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.
L'interrogation user_tables
et dba_tables
n'a pas fonctionné.
Celui-ci a:
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 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.
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
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 @Justin Cave le mentionne, vous pouvez l'utiliser pour afficher uniquement les tables que vous possédez:
SELECT table_name FROM user_tables;
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;
Cela devrait donner quelque chose d'assez acceptable, à savoir:
Requête simple pour sélectionner les tables de l'utilisateur actuel:
SELECT table_name FROM user_tables;
select object_name from user_objects where object_type='TABLE';
----------------OU------------------
select * from tab;
----------------OU------------------
select table_name from user_tables;
Essayez les vues du dictionnaire de données ci-dessous.
tabs
dba_tables
all_tables
user_tables
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
Essayez de sélectionner dans user_tables , qui répertorie les tables appartenant à l'utilisateur actuel.
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';
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
.
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
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;
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
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.
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;
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 ).
Une nouvelle fonctionnalité disponible dans SQLcl (qui est une interface de ligne de commande libre pour Oracle Database) est
Tables
alias.
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
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:
Votre base de données sera affichée dans le logiciel sous forme de diagramme Entity Relationship.
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;
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;