Jak zapytać bazę danych Oracle, aby wyświetlić nazwy wszystkich tabel w niej zawartych?
Jak zapytać bazę danych Oracle, aby wyświetlić nazwy wszystkich tabel w niej zawartych?
Odpowiedzi:
SELECT owner, table_name
FROM dba_tables
Zakłada się, że masz dostęp do DBA_TABLES
widoku słownika danych. Jeśli nie masz tych uprawnień, ale potrzebujesz ich, możesz zażądać, aby DBA jawnie przyznało ci uprawnienia do tej tabeli, lub że DBA przyznaje ci SELECT ANY DICTIONARY
uprawnienia lub SELECT_CATALOG_ROLE
rolę (które pozwolą ci na zapytanie dowolnej tabeli słownika danych) ). Oczywiście, można wykluczyć pewnych schematów jak SYS
i SYSTEM
które mają dużą liczbę tabel Oracle, że prawdopodobnie nie obchodzi.
Alternatywnie, jeśli nie masz dostępu DBA_TABLES
, możesz zobaczyć wszystkie tabele, do których twoje konto ma dostęp poprzez ALL_TABLES
widok:
SELECT owner, table_name
FROM all_tables
Chociaż może to być podzbiór tabel dostępnych w bazie danych ( ALL_TABLES
pokazuje informacje o wszystkich tabelach, do których użytkownik uzyskał dostęp).
Jeśli interesują Cię tylko tabele, które posiadasz, a nie te, do których masz dostęp, możesz użyć USER_TABLES
:
SELECT table_name
FROM user_tables
Ponieważ USER_TABLES
ma tylko informacje o tabelach, które posiadasz, nie ma OWNER
kolumny - właścicielem z definicji jesteś ty.
Oracle ma również szereg dotychczasowych danych słownika views-- TAB
, DICT
, TABS
, i CAT
dla example-- które mogłyby zostać wykorzystane. Zasadniczo nie sugerowałbym używania tych starszych widoków, chyba że absolutnie musisz przenieść swoje skrypty do Oracle 6. Oracle długo nie zmieniało tych widoków, więc często mają problemy z nowszymi typami obiektów. Na przykład oba widoki TAB
i CAT
pokazują informacje o tabelach znajdujących się w koszu użytkownika, podczas gdy [DBA|ALL|USER]_TABLES
wszystkie widoki je odfiltrowują. CAT
pokazuje również informacje o zmaterializowanych dziennikach widoku za pomocą TABLE_TYPE
„TABELI”, co prawdopodobnie nie będzie tym, czego naprawdę chcesz. DICT
łączy tabele i synonimy i nie mówi, kto jest właścicielem obiektu.
Zapytania user_tables
i dba_tables
nie działały.
Ten zrobił:
select table_name from all_tables
Idąc o krok dalej, istnieje inny widok o nazwie cols (all_tab_columns), którego można użyć do ustalenia, które tabele zawierają daną nazwę kolumny.
Na przykład:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
aby znaleźć wszystkie tabele o nazwie zaczynającej się od EST i kolumny zawierające CALLREF w dowolnym miejscu ich nazw.
Może to pomóc w określeniu, do których kolumn chcesz dołączyć, na przykład w zależności od konwencji nazewnictwa tabel i kolumn.
select * from cols
i otrzymałem 0 wierszy.
sqlplus
Jeśli używasz, sqlplus
możesz najpierw ustawić kilka parametrów dla lepszego oglądania, jeśli kolumny są zniekształcone (te zmienne nie powinny się utrzymywać po zakończeniu sqlplus
sesji):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
Następnie możesz użyć czegoś takiego, aby zobaczyć wszystkie nazwy tabel:
SELECT table_name, owner, tablespace_name FROM all_tables;
Jak wspomina @Justin Cave, możesz użyć tego, aby wyświetlić tylko stoły, które posiadasz:
SELECT table_name FROM user_tables;
Pamiętaj, że niektóre „tabele” mogą w rzeczywistości być „widokami”, więc możesz także spróbować uruchomić coś takiego:
SELECT view_name FROM all_views;
Powinno to dać coś, co wygląda dość akceptowalnie, na przykład:
pagesize 30
z pagesize 1000
?
Proste zapytanie, aby wybrać tabele dla bieżącego użytkownika:
SELECT table_name FROM user_tables;
Wypróbuj poniższe widoki słownika danych.
tabs
dba_tables
all_tables
user_tables
Spróbuj wybrać z tabel_użytkowników, które zawierają tabele należące do bieżącego użytkownika.
Baza danych Oracle do wyświetlania nazw wszystkich tabel przy użyciu poniższego zapytania
WYBIERZ właściciela, nazwa_tabeli OD dba_tables; WYBIERZ właściciela, nazwa_tabeli Z wszystkich tabel; WYBIERZ nazwę_tabeli z tabel_użytkowników;
zobacz więcej: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
daje wszystkie tabele wszystkich użytkowników tylko wtedy, gdy użytkownik, z którym się zalogowałeś, ma sysdba
uprawnienia.
Nie znalazłem odpowiedzi, która wskazywałaby na użycie
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
więc postanowiłem również dodać moją wersję. Ten widok faktycznie zwraca więcej niż DBA_TABLES, ponieważ zwraca również tabele obiektów ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
Możesz użyć Oracle Data Dictionary, aby uzyskać informacje o obiektach Oracle.
Możesz uzyskać listę tabel na różne sposoby:
select *
from dba_tables
lub na przykład:
select *
from dba_objects
where object_type = 'TABLE'
Następnie możesz uzyskać kolumny tabeli, używając nazwy tabeli:
select *
from dba_tab_columns
Następnie możesz uzyskać listę zależności (wyzwalacze, widoki itp.):
select *
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name
Następnie możesz uzyskać źródło tekstu tych obiektów:
select * from dba_source
I możesz użyć USER
lub ALL
widoki zamiast, DBA
jeśli chcesz.
Możemy uzyskać wszystkie tabele, w tym szczegóły kolumn z poniższego zapytania:
SELECT * FROM user_tab_columns;
Poniżej znajduje się skomentowany fragment zapytań SQL opisujący, w jaki sposób możesz skorzystać z opcji:
-- need to have select catalog role
SELECT * FROM dba_tables;
-- to see tables of your schema
SELECT * FROM user_tables;
-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;
Nowa funkcja dostępna w SQLcl (który jest bezpłatnym interfejsem wiersza poleceń dla Oracle Database)
Tables
Alias.
Oto kilka przykładów pokazujących użycie i dodatkowe aspekty tej funkcji. Najpierw połącz się z sesją sql
wiersza poleceń ( sql.exe
w systemie Windows). Zaleca się wpisanie tego polecenia specyficznego dla sqlcl przed uruchomieniem jakichkolwiek innych poleceń lub zapytań wyświetlających dane.
SQL> set sqlformat ansiconsole -- resizes the columns to the width of the
-- data to save space
SQL> tables
TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..
Aby wiedzieć, do czego tables
odnosi się alias, możesz po prostu użyćalias list <alias>
SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------
select table_name "TABLES" from user_tables
Nie musisz definiować tego aliasu, ponieważ domyślnie jest on dostępny w SQLcl. Jeśli chcesz wyświetlić tabele z określonego schematu, używając nowego aliasu zdefiniowanego przez użytkownika i przekazując nazwę schematu jako argument powiązania z wyświetlanym tylko zestawem kolumn, możesz to zrobić za pomocą
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Następnie możesz po prostu przekazać nazwę schematu jako argument
SQL> tables_schema HR
OWNER TABLE_NAME LAST_ANALYZED
HR DUMMY1 18-10-18
HR YOURTAB2 16-11-18
HR YOURTABLE 01-12-18
HR ID_TABLE 05-12-18
HR REGIONS 26-05-18
HR LOCATIONS 26-05-18
HR DEPARTMENTS 26-05-18
HR JOBS 26-05-18
HR EMPLOYEES 12-10-18
..
..
Bardziej zaawansowany predefiniowany alias jest znany jako Tables2
, który wyświetla kilka innych kolumn.
SQL> tables2
Tables
======
TABLE_NAME NUM_ROWS BLOCKS UNFORMATTED_SIZE COMPRESSION INDEX_COUNT CONSTRAINT_COUNT PART_COUNT LAST_ANALYZED
AN_IP_TABLE 0 0 0 Disabled 0 0 0 > Month
PARTTABLE 0 0 0 1 0 1 > Month
TST2 0 0 0 Disabled 0 0 0 > Month
TST3 0 0 0 Disabled 0 0 0 > Month
MANAGE_EMPLYEE 0 0 0 Disabled 0 0 0 > Month
PRODUCT 0 0 0 Disabled 0 0 0 > Month
ALL_TAB_X78EHRYFK 0 0 0 Disabled 0 0 0 > Month
TBW 0 0 0 Disabled 0 0 0 > Month
DEPT 0 0 0 Disabled 0 0 0 > Month
Aby dowiedzieć się, jakie zapytanie działa w tle, wpisz
alias list tables2
Spowoduje to wyświetlenie nieco bardziej złożonego zapytania wraz ze wstępnie zdefiniowanymi column
definicjami powszechnie używanymi w SQL * Plus.
Jeff Smith wyjaśnia więcej na temat aliasów tutaj
Chciałem uzyskać listę wszystkich nazw kolumn należących do tabeli schematu posortowanej według kolejności id kolumny.
Oto zapytanie, którego używam: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
Rzeczywiście, możliwe jest tworzenie listy tabel za pomocą zapytań SQL. Można to również zrobić za pomocą narzędzi, które pozwalają na generowanie słowników danych, takich jak ERWIN , Toad Data Modeler lub ERBuilder . Dzięki tym narzędziom oprócz nazw tabel będziesz mieć pola, ich typy, obiekty takie jak (wyzwalacze, sekwencje, domena, widoki ...)
Poniższe kroki do wygenerowania definicji tabel:
Twoja baza danych zostanie wyświetlona w oprogramowaniu jako diagram relacji encji.
select * from all_all_tables
to dodatkowe „wszystko” na początku daje dodatkowe 3 kolumny, które są:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(jak zrobiono w MySQL) działa?