How do I query an Oracle database to display the names of all tables in it?
How do I query an Oracle database to display the names of all tables in it?
SELECT owner, table_name
FROM dba_tables
This is assuming that you have access to the DBA_TABLES data dictionary view. If you do not have those privileges but need them, you can request that the DBA explicitly grants you privileges on that table, or, that the DBA grants you the SELECT ANY DICTIONARY privilege or the SELECT_CATALOG_ROLE role (either of which would allow you to query any data dictionary table). Of course, you may want to exclude certain schemas like SYS and SYSTEM which have large numbers of Oracle tables that you probably don't care about.
Alternatively, if you do not have access to DBA_TABLES, you can see all the tables that your account has access to through the ALL_TABLES view:
SELECT owner, table_name
FROM all_tables
Although, that may be a subset of the tables available in the database (ALL_TABLES shows you the information for all the tables that your user has been granted access to).
If you are only concerned with the tables that you own, not those that you have access to, you could use USER_TABLES:
SELECT table_name
FROM user_tables
Since USER_TABLES only has information about the tables that you own, it does not have an OWNER column – the owner, by definition, is you.
Oracle also has a number of legacy data dictionary views-- TAB, DICT, TABS, and CAT for example-- that could be used. In general, I would not suggest using these legacy views unless you absolutely need to backport your scripts to Oracle 6. Oracle has not changed these views in a long time so they often have problems with newer types of objects. For example, the TAB and CAT views both show information about tables that are in the user's recycle bin while the [DBA|ALL|USER]_TABLES views all filter those out. CAT also shows information about materialized view logs with a TABLE_TYPE of "TABLE" which is unlikely to be what you really want. DICT combines tables and synonyms and doesn't tell you who owns the object.
Querying user_tables and dba_tables didn't work.
This one did:
select table_name from all_tables
Execute the below commands:
Show all tables in the Oracle Database
sql> SELECT table_name FROM dba_tables;
Show tables owned by the current user
sql> SELECT table_name FROM user_tables;
Show tables that are accessible by the current user
A new feature available in SQLcl( which is a free command line interface for Oracle Database) is
Tables alias.
Here are few examples showing the usage and additional aspects of the feature. First, connect to a sql command line (sql.exe in windows) session. It is recommended to enter this sqlcl specific command before running any other commands or queries which display data.
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
..
To know what the tables alias is referring to, you may simply use alias list <alias>
SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------
select table_name "TABLES" from user_tables
You don't have to define this alias as it comes by default under SQLcl. If you want to list tables from a specific schema, using a new user-defined alias and passing schema name as a bind argument with only a set of columns being displayed, you may do so using
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Thereafter you may simply pass schema name as an 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
..
..
A more sophisticated pre-defined alias is known as Tables2, which displays several other columns.
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
To know what query it runs in the background, enter
alias list tables2
This will show you a slightly more complex query along with predefined column definitions commonly used in SQL*Plus.
Jeff Smith explains more about aliases here
You can use Oracle Data Dictionary to get information about oracle objects.
You can get list of tables in different ways:
select *
from dba_tables
or for example:
select *
from dba_objects
where object_type = 'TABLE'
Then you can get table columns using table name:
select *
from dba_tab_columns
Then you can get list of dependencies (triggers, views and etc.):
select *
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name
Then you can get text source of this objects:
select * from dba_source
And you can use USER or ALL views instead of DBA if you want.
Including views:
SELECT owner, table_name as table_view
FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
FROM DBA_VIEWS
We can get all tables including column details from below query:
SELECT * FROM user_tab_columns;
Indeed, it is possible to have the list of tables via SQL queries.it is possible to do that also via tools that allow the generation of data dictionaries, such as ERWIN, Toad Data Modeler or ERBuilder. With these tools, in addition to table names, you will have fields, their types, objects like(triggers, sequences, domain, views...)
Below steps to follow to generate your tables definition:
Your database will be displayed in the software as an Entity Relationship diagram.
To get all the table names, we can use:
Select owner, table_name from all_tables;
if you have dba permission, you can use:
Select owner, table_name from dba_tables;
select * from all_all_tables
this additional 'all' at the beginning gives extra 3 columns which are:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE