Come posso interrogare un database Oracle per visualizzare i nomi di tutte le tabelle in esso contenute?
SELECT owner, table_name
FROM dba_tables
Questo presuppone che tu abbia accesso alla vista del dizionario dei dati DBA_TABLES
. Se non hai quei privilegi ma ne hai bisogno, puoi richiedere che il DBA ti conceda esplicitamente i privilegi su quella tabella, oppure, che il DBA ti conceda il privilegio SELECT ANY DICTIONARY
o il ruolo SELECT_CATALOG_ROLE
(entrambi i quali ti permetterebbero di interrogare qualsiasi tabella del dizionario dati). Naturalmente, potresti voler escludere certi schemi come SYS
e SYSTEM
che hanno un gran numero di tabelle Oracle che probabilmente non ti interessano.
In alternativa, se non hai accesso a DBA_TABLES
, puoi vedere tutte le tabelle a cui il tuo account ha accesso attraverso la vista ALL_TABLES
:
SELECT owner, table_name
FROM all_tables
Anche se questo potrebbe essere un sottoinsieme delle tabelle disponibili nel database (ALL_TABLES
ti mostra le informazioni per tutte le tabelle a cui il tuo utente ha accesso).
Se sei interessato solo alle tabelle che possiedi, non a quelle a cui hai accesso, potresti usare USER_TABLES
:
SELECT table_name
FROM user_tables
Poiché USER_TABLES
ha solo informazioni sulle tabelle che possiedi, non ha una colonna OWNER
- il proprietario, per definizione, sei tu.
Oracle ha anche un certo numero di viste legacy per dizionari di dati - TAB
, DICT
, TABS
, e CAT
per esempio - che potrebbero essere usate. In generale, non suggerirei di usare queste viste legacy a meno che non abbiate assolutamente bisogno di riportare i vostri script a Oracle 6. Oracle non ha cambiato queste viste da molto tempo, quindi spesso hanno problemi con i nuovi tipi di oggetti. Per esempio, le viste TAB
e CAT
mostrano entrambe informazioni sulle tabelle che sono nel cestino dell'utente mentre le viste [DBA|ALL|USER]_TABLES
le filtrano tutte. CAT
mostra anche informazioni sui log delle viste materializzate con un TABLE_TYPE
di "TABLE" che è improbabile che sia quello che vuoi veramente. DICT
combina tabelle e sinonimi e non ti dice chi possiede l'oggetto.