How to List All Tables in Oracle

Data Tutorial

As with most relational databases, there may come a situation where you need to view the the underlying metadata and look through the actual table list and ownership of your database. Thankfully, there are multiple ways to perform this relatively simple task in Oracle, so we’ll briefly explore each option below to find which best suits your needs.

What are Oracle Data Dictionaries?

A data dictionary in Oracle is a collection of read-only tables that provide useful information about the database including schemas, users, privileges, and even auditing data. The values in these stored dictionaries are updated automatically by Oracle anytime a statement is executed on the server that modifies data.

From there, the read-only dictionaries can be read and queried just like any standard table, which as we’ll see below provides some very useful functionality.

Viewing Tables Owned by Current user

At the most basic level, you may wish to view a list of all the tables owned by the current Oracle user. This can be accomplished with a simple SELECT query on the USER_TABLES data dictionary.

Once connected to Oracle, issue this statement:

SELECT
  table_name, owner
FROM
  user_tables
ORDER BY
  owner, table_name

This will return a list of all tables that the current user is owner of, as specified in the owner column.

Viewing Tables Accessible by Current User

In a situation where you’re only interested in what tables the current Oracle user has access to, regardless of ownership, you’ll use the ALL_TABLES data dictionary instead.

SELECT
  table_name, owner
FROM
  all_tables
ORDER BY
  owner, table_name

It’s likely that this query will return far more results than you are interested in since you’re viewing everything even remotely accessible to the user, so you may wish to limit your query by specifying an appropriate owner, like so:

SELECT
  table_name, owner
FROM
  all_tables
WHERE
  owner='schema_name'
ORDER BY
  owner, table_name

Viewing All Tables

Lastly, when you absolutely need to view every table in the system, look no further than the great and powerful DBA_TABLES data dictionary.

SELECT
  table_name, owner
FROM
  dba_tables
WHERE
  owner='schema_name'
ORDER BY
  owner, table_name

It is important to note that this final DBA_TABLES dictionary may require user privileges beyond what the current user has. If necessary, you may need to be granted the SELECT ANY DICTIONARY privilege or the SELECT_CATALOG_ROLE role. More information on granting these privileges can be found in the official documentation.