Hanki luettelo kaikista Oraclen taulukoista?

Miten kysyn Oracle-tietokannasta kaikkien siinä olevien taulukoiden nimet?

Ratkaisu
SELECT owner, table_name
  FROM dba_tables

Tämä edellyttää, että sinulla on pääsy DBA_TABLES-tietosanakirjanäkymään. Jos sinulla ei ole näitä oikeuksia, mutta tarvitset niitä, voit pyytää DBA:ta myöntämään sinulle nimenomaisesti oikeudet kyseiseen tauluun tai pyytää DBA:ta myöntämään sinulle SELECT ANY DICTIONARY-oikeuden tai SELECT_CATALOG_ROLE-roolin (kummallakin näistä voit kysyä mitä tahansa tietosanakirjataulua). Tietenkin voit halutessasi sulkea pois tietyt skeemat, kuten SYS ja SYSTEM, joissa on suuri määrä Oracle-tauluja, joista et todennäköisesti välitä.

Vaihtoehtoisesti, jos sinulla ei ole käyttöoikeutta DBA_TABLES -näkymään, voit nähdä kaikki taulut, joihin tililläsi on käyttöoikeus ALL_TABLES-näkymän kautta:

SELECT owner, table_name
  FROM all_tables

Tosin se voi olla osajoukko tietokannassa käytettävissä olevista taulukoista (ALL_TABLES näyttää kaikkien niiden taulukoiden tiedot, joihin käyttäjälläsi on myönnetty käyttöoikeus).

Jos olet huolissasi vain omista taulukoista, etkä niistä, joihin sinulla on pääsy, voit käyttää USER_TABLES:

SELECT table_name
  FROM user_tables

Koska USER_TABLES sisältää tietoja vain omista taulukoista, siinä ei ole OWNER-saraketta - omistaja olet määritelmän mukaan sinä.

Oraclella on myös useita vanhoja tietosanakirjanäkymiä - esimerkiksi TAB, DICT, TABS ja CAT - joita voitaisiin käyttää. Yleisesti ottaen en suosittele näiden vanhojen näkymien käyttämistä, ellei skriptejä välttämättä tarvitse siirtää takaisin Oracle 6:een. Oracle ei ole muuttanut näitä näkymiä pitkään aikaan, joten niissä on usein ongelmia uudentyyppisten objektien kanssa. Esimerkiksi TAB- ja CAT-näkymät näyttävät molemmat tietoja taulukoista, jotka ovat käyttäjän roskakorissa, kun taas [DBA|ALL|USER]_TABLES-näkymät suodattavat ne kaikki pois. CAT-näkymä näyttää myös tietoja materialisoitujen näkymien lokitiedoista, joiden TABLE_TYPE on "TABLE", mikä ei todennäköisesti ole sitä, mitä todella haluat. DICT yhdistää taulukot ja synonyymit eikä kerro, kuka omistaa objektin.

Kommentit (6)

user_tables- ja dba_tables-taulukoiden kysely ei toiminut.
Tämä onnistui:

select table_name from all_tables  
Kommentit (1)

Kokeile valita user_tables, jossa luetellaan nykyisen käyttäjän omistamat taulukot.

Kommentit (0)