Get list of all tables in Oracle?

2018-12-31 17:10发布

How do I query an Oracle database to display the names of all tables in it?

标签: sql oracle
19条回答
泪湿衣
2楼-- · 2018-12-31 17:31

Querying user_tables and dba_tables didn't work.
This one did:

select table_name from all_tables  
查看更多
何处买醉
3楼-- · 2018-12-31 17:33

Simple query to select the tables for the current user:

  SELECT table_name FROM user_tables;
查看更多
君临天下
4楼-- · 2018-12-31 17:34

For better viewing with sqlplus

If you're using sqlplus you may want to first set up a few parameters for nicer viewing if your columns are getting mangled (these variables should not persist after you exit your sqlplus session ):

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

Show All Tables

You can then use something like this to see all table names:

SELECT table_name, owner, tablespace_name FROM all_tables;

Show Tables You Own

As @Justin Cave mentions, you can use this to show only tables that you own:

SELECT table_name FROM user_tables;

Don't Forget about Views

Keep in mind that some "tables" may actually be "views" so you can also try running something like:

SELECT view_name FROM all_views;

The Results

This should yield something that looks fairly acceptable like:

result

查看更多
旧时光的记忆
5楼-- · 2018-12-31 17:34

Try the below data dictionary views.

tabs
dba_tables
all_tables
user_tables
查看更多
不再属于我。
6楼-- · 2018-12-31 17:36
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.

查看更多
君临天下
7楼-- · 2018-12-31 17:37
    select object_name from user_objects where object_type='TABLE';

----------------OR------------------

    select * from tab;

----------------OR------------------

    select table_name from user_tables;
查看更多
登录 后发表回答