Hvordan forespørger jeg en Oracle-database for at få vist navnene på alle tabellerne i den?
SELECT owner, table_name
FROM dba_tables
Dette forudsætter, at du har adgang til dataordbogsvisningen DBA_TABLES
. Hvis du ikke har disse rettigheder, men har brug for dem, kan du anmode om, at DBA'en udtrykkeligt giver dig rettigheder til den pågældende tabel, eller at DBA'en giver dig SELECT ANY DICTIONARY
-privilegiet eller SELECT_CATALOG_ROLE
-rollen (som begge giver dig mulighed for at forespørge på enhver dataordbogstabel). Du kan naturligvis udelukke visse skemaer som SYS
og SYSTEM
, som har et stort antal Oracle-tabeller, som du sandsynligvis er ligeglad med.
Alternativt kan du, hvis du ikke har adgang til DBA_TABLES
, se alle de tabeller, som din konto har adgang til, via visningen ALL_TABLES
:
SELECT owner, table_name
FROM all_tables
Selv om det kan være en delmængde af de tabeller, der er tilgængelige i databasen (ALL_TABLES
viser dig oplysninger om alle de tabeller, som din bruger har fået adgang til).
Hvis du kun er interesseret i de tabeller, som du ejer, og ikke dem, som du har adgang til, kan du bruge USER_TABLES
:
SELECT table_name
FROM user_tables
Da USER_TABLES
kun indeholder oplysninger om de tabeller, som du ejer, har den ikke en kolonne OWNER
- ejeren er pr. definition dig.
Oracle har også en række gamle data dictionary views - TAB
, DICT
, TABS
og CAT
for eksempel - som kan bruges. Generelt vil jeg ikke anbefale at bruge disse legacy views, medmindre du absolut har brug for at backportere dine scripts til Oracle 6. Oracle har ikke ændret disse visninger i lang tid, så de har ofte problemer med nyere typer objekter. F.eks. viser TAB
og CAT
-visningerne begge oplysninger om tabeller, der er i brugerens papirkurv, mens [DBA|ALL|USER]_TABLES
-visningerne alle filtrerer dem fra. CAT
viser også oplysninger om materialiserede view-logfiler med en TABLE_TYPE
på "TABLE" hvilket sandsynligvis ikke er det, du virkelig ønsker. DICT
kombinerer tabeller og synonymer og fortæller ikke, hvem der ejer objektet.