Iegūt visu Oracle tabulu sarakstu?

Kā veikt Oracle datubāzes vaicājumu, lai parādītu visu tajā esošo tabulu nosaukumus?

Risinājums
SELECT owner, table_name
  FROM dba_tables

Tiek pieņemts, ka jums ir piekļuve DBA_TABLES datu vārdnīcas skatam. Ja jums nav šo privilēģiju, bet tās ir nepieciešamas, varat lūgt, lai DBA skaidri piešķir jums privilēģijas attiecībā uz šo tabulu, vai arī lai DBA piešķir jums SELECT ANY DICTIONARY privilēģijas vai SELECT_CATALOG_ROLE lomu (abas šīs tiesības ļautu jums veikt vaicājumus jebkurā datu vārdnīcas tabulā). Protams, jūs varat izslēgt dažas shēmas, piemēram, SYS un SYSTEM, kurās ir liels skaits Oracle tabulu, kas jums, iespējams, nav svarīgas.

Ja jums nav piekļuves DBA_TABLES, varat arī apskatīt visas tabulas, kurām jūsu kontam ir piekļuve, izmantojot skatu ALL_TABLES:

SELECT owner, table_name
  FROM all_tables

Lai gan tas var būt datu bāzē pieejamo tabulu apakškopa (ALL_TABLES parāda informāciju par visām tabulām, kurām jūsu lietotājam ir piešķirta piekļuve).

Ja jūs interesē tikai tās tabulas, kas jums pieder, nevis tās, kurām jums ir piekļuve, varat izmantot USER_TABLES:

SELECT table_name
  FROM user_tables

Tā kā USER_TABLES satur informāciju tikai par tabulām, kas jums pieder, tajā nav slejas OWNER - īpašnieks pēc definīcijas esat jūs.

Oracle ir arī vairāki mantotie datu vārdnīcas skati, piemēram, TAB, DICT, TABS un CAT, kurus var izmantot. Kopumā es nerekomendētu izmantot šos novecojušos skatījumus, ja vien jums nav obligāti nepieciešams atgriezt savus skriptus uz Oracle 6. Oracle jau ilgu laiku nav mainījis šos skatus, tāpēc tiem bieži ir problēmas ar jaunākiem objektu tipiem. Piemēram, gan TAB, gan CAT skatījumi parāda informāciju par tabulām, kas atrodas lietotāja atkritumu tvertnē, bet [DBA|ALL|USER]_TABLES skatījumi tos visus filtrē. CAT rāda arī informāciju par materializēto skatījumu žurnāliem ar TABLE_TYPE "TABLE", kas, visticamāk, nav tas, ko jūs patiešām vēlaties. DICT apvieno tabulas un sinonīmus, un nepaziņo, kam pieder objekts.

Komentāri (6)

Vaicājot user_tables un dba_tables nestrādāja.
Šis risinājums to izdarīja:

select table_name from all_tables  
Komentāri (1)

Mēģiniet atlasīt no user_tables, kurā ir uzskaitītas pašreizējam lietotājam piederošās tabulas.

Komentāri (0)