Kaip pateikti užklausą "Oracle" duomenų bazei, kad būtų rodomi visų joje esančių lentelių pavadinimai?
SELECT owner, table_name
FROM dba_tables
Tai daroma darant prielaidą, kad turite prieigą prie DBA_TABLES
duomenų žodyno rodinio. Jei šių teisių neturite, bet jums jų reikia, galite paprašyti, kad DBA aiškiai suteiktų jums privilegijas toje lentelėje, arba kad DBA suteiktų jums SELECT ANY DICTIONARY
privilegiją arba SELECT_CATALOG_ROLE
vaidmenį (bet kuris iš šių vaidmenų leistų jums pateikti užklausą bet kuriai duomenų žodyno lentelei). Žinoma, galite norėti neįtraukti tam tikrų schemų, pavyzdžiui, SYS
ir SYSTEM
, kuriose yra daug "Oracle" lentelių, kurios jums tikriausiai nerūpi.
Jei neturite prieigos prie DBA_TABLES
, visas lenteles, prie kurių jūsų paskyra turi prieigą, galite matyti naudodami ALL_TABLES
rodinį:
SELECT owner, table_name
FROM all_tables
Nors tai gali būti tik dalis duomenų bazėje esančių lentelių (ALL_TABLES
rodo visų lentelių, prie kurių jūsų naudotojui suteikta prieiga, informaciją).
Jei jus domina tik jums priklausančios lentelės, o ne tos, prie kurių turite prieigą, galite naudoti USER_TABLES
:
SELECT table_name
FROM user_tables
Kadangi USER_TABLES
turi informaciją tik apie jums priklausančias lenteles, jis neturi stulpelio OWNER
- savininkas pagal apibrėžimą esate jūs.
"Oracle" taip pat turi keletą senųjų duomenų žodyno rodinių, pavyzdžiui, TAB
, DICT
, TABS
ir CAT
, kuriuos galima naudoti. Apskritai nesiūlyčiau naudoti šių senųjų rodinių, nebent jums būtinai reikia perkelti savo scenarijus į "Oracle 6". "Oracle" ilgai nekeitė šių rodinių, todėl jie dažnai turi problemų su naujesnių tipų objektais. Pavyzdžiui, TAB
ir CAT
rodinyse rodoma informacija apie lenteles, kurios yra vartotojo šiukšlių dėžėje, o [DBA|ALL|USER]_TABLES
rodinyse visi šie duomenys filtruojami. CAT
taip pat rodo informaciją apie materializuotų rodinių žurnalus, kurių TABLE_TYPE
yra "TABLE", o tai vargu ar yra tai, ko iš tikrųjų norite. DICT
apjungia lenteles ir sinonimus ir nepasako, kam priklauso objektas.
Pabandykite pasirinkti iš user_tables, kurioje išvardytos dabartiniam naudotojui priklausančios lentelės.