tags:

views:

187

answers:

7

How do i list all tables in a schema in Oracle SQL?

+5  A: 

You can query USER_TABLES

select TABLE_NAME from user_tables
Sathya
That's all the tables in YOUR schema, not all the tables in A schema. Also, the *_TABLES data dictionary views (DBA_TABLES, ALL_TABLES, USER_TABLES) include views.
Adam Musch
replace "include views" with "can include views in seme versions of Oracle."
Adam Musch
@Adam Musch Tested using Oracle 10g R2, it didn't return views.
Sathya
A: 

Try this, replace ? with your schema name

select TABLE_NAME from  INFORMATION_SCHEMA.TABLES
 WHERE TABLE_SCHEMA =?
  AND TABLE_TYPE = 'BASE TABLE'
SQLMenace
This is more database agnostic, and so I think this type of solution is better over all the alternatives. I think INFORMATION_SCHEMA works on just about every major database I've seen. Although some differ in what information you can get out, at least it's a consistent place to look. However from doing a quick internet search, it appears Oracle is just about the only database to not support Information_Schema, even though it's part of the SQL-92 standard.
Kibbee
Of course, OP specifically asked for an Oracle solution...
DCookie
A: 

Look at my simple utility to show some info about db schema. It is based on: Reverse Engineering a Data Model Using the Oracle Data Dictionary

Michał Niklas
+6  A: 
SELECT table_name  from all_tables where owner = 'YOURSCHEMA';
Tom
The schemanaame should be in UPPERCASE
Gary
This will only show *all* the tables in YOURSCHEMA if run by YOURSCHEMA or run by a user with the privileges mentioned by Adam Musch. Otherwise it just shows the tables in YOURSCHEMA to which we have been granted privileges.
APC
A: 

If you are accessing Oracle with JDBC (Java) you can use DatabaseMetadata class. If you are accessing Oracle with ADO.NET you can use a similar approach.

If you are accessing Oracle with ODBC, you can use SQLTables function.

Otherwise, if you just need the information in SQLPlus or similar Oracle client, one of the queries already mentioned will do. For instance:

select TABLE_NAME from user_tables
Pablo Santa Cruz
+8  A: 

To see all tables in another schema, you need to have one or more of the following system privileges:

SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE

or the big-hammer, the DBA role.

With any of those, you can select:

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = '[some other schema]'

Without those system privileges, you can only see tables you have been granted some level of access to, whether directly or through a role.

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM ALL_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = '[some other schema]'

Lastly, you can always query the data dictionary for your own tables, as your rights to your tables cannot be revoked (as of 10g):

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM USER_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
Adam Musch
+1, most complete answer.
DCookie
the "most complete answer" apart from its use of `%_OBJECTS` instead of `%_TABLES`.
APC
I remember in 9i that views would be listed in %_TABLES -- so, for example, trying to automate emptying a schema would end up with statements like DROP TABLE REALLY_A_VIEW CASCADE CONSTRAINTS throwing errors. So you'd either have to remove the views with MINUS / NOT IN / NOT EXISTS or go agains %_OBJECTS. Plus, going against %_OBJECTS leaves a tantalizing hint of what else might be in there!
Adam Musch
+1  A: 

http://www.psoug.org/reference/library.html

A good source for oracle commands

Abhiram