Отримати список усіх таблиць в Oracle?


1102

Як я запитую базу даних Oracle для відображення назв усіх таблиць у ній?


1
Чи працює SHOW TABLES(як це робиться в MySQL)?
Мартін Тома

1
@MartinThoma nope. спробував це спершу, перш ніж вдаватися до Google
Адам Берлі

Відповіді:


1364
SELECT owner, table_name
  FROM dba_tables

Це передбачається, що у вас є доступ до DBA_TABLESперегляду словника даних. Якщо у вас немає цих привілеїв, але вони потрібні, ви можете попросити, щоб DBA явно надав вам привілеї в цій таблиці, або, що DBA надає вам SELECT ANY DICTIONARYпривілей або SELECT_CATALOG_ROLEроль (будь-яка з яких дозволить вам запитувати будь-яку таблицю словника даних. ). Звичайно, ви можете виключити певні схеми, такі як SYSі у SYSTEMяких є велика кількість таблиць Oracle, які, напевно, не цікавлять вас.

Крім того, якщо у вас немає доступу DBA_TABLES, ви можете переглядати всі таблиці, до яких має доступ ваш обліковий запис через ALL_TABLESперегляд:

SELECT owner, table_name
  FROM all_tables

Хоча це може бути підмножина таблиць, доступних у базі даних ( ALL_TABLESпоказує інформацію про всі таблиці, до яких користувачеві надано доступ).

Якщо ви переймаєтесь лише власними таблицями, а не тими, до яких у вас є доступ, ви можете використовувати USER_TABLES:

SELECT table_name
  FROM user_tables

Оскільки у вас є USER_TABLESлише інформація про ваші таблиці, якими ви володієте, у неї немає OWNERстовпця - власник, за визначенням, це ви.

Oracle також має ряд застарілих переглядів словників даних--,, TABі DICT, наприклад TABS, CAT- які можна було б використовувати. Загалом, я б не пропонував використовувати ці застарілі представлення, якщо вам абсолютно не потрібно підтримувати свої сценарії до Oracle 6. Oracle давно не змінював ці погляди, тому у них часто виникають проблеми з новими типами об’єктів. Наприклад, TABі в CATпредставленнях і в представленнях відображається інформація про таблиці, які знаходяться в кошику користувача, тоді як [DBA|ALL|USER]_TABLESусі представлення фільтрують їх. CATтакож відображається інформація про матеріалізовані журнали подання з TABLE_TYPE"ТАБЛИЦІ", що навряд чи буде тим, що ви дійсно хочете. DICTпоєднує таблиці та синоніми і не повідомляє, кому належить об'єкт.


9
Я отримую виняток "ORA-00942: таблиця або перегляд не існує"
vitule

46
Тоді вам не дали дозволу переглядати всі таблиці в базі даних. Ви можете запитувати представлення словника даних ALL_TABLES, щоб побачити всі таблиці, до яких ви можете отримати доступ, які можуть бути невеликим підмножиною таблиць у базі даних.
Джастін Печера

Проста помилка, якщо не повсякденний користувач sqlplus: додайте закінчувальну крапку з двокрапкою (';'), якщо ви просто не отримаєте результатів за допомогою наведених вище команд :).
Гімхані

Лише зауважте, що станом на Oracle 12c в словнику даних dba_users є стовпець, який допомагає видалити системні таблиці з набору результатів. Повний запит буде ВИБРАТИ власником, ім'я таблиці - від dba_tables, де власник не входить (виберіть ім'я користувача від dba_users, де oracle_maintain = 'Y')
saritonin

181

Запит user_tablesі dba_tablesне працював.
Цей зробив:

select table_name from all_tables  

14
@LimitedAtonement Вибачте, це просто неправильно. Перегляд називається user_tables, а не user_table. Якщо user_tables не працювали на vitule, щось інше було не так.
Френк Шмітт

67

Перейшовши на крок далі, існує ще один вигляд під назвою cols (all_tab_columns), який може бути використаний для встановлення, які таблиці містять задану назву стовпця.

Наприклад:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

щоб знайти всі таблиці, назви яких починаються з EST, і стовпці, що містять CALLREF в будь-якому місці їхніх імен.

Це може допомогти при розробці, до яких стовпців ви хочете приєднатися, наприклад, залежно від умов іменування таблиці та стовпців.


4
Я зробив select * from colsі отримав 0 рядків.
Гейб

50

Для кращого перегляду с sqlplus

Якщо ви користуєтесь, sqlplusви можете спершу налаштувати кілька параметрів для приємнішого перегляду, якщо ваші стовпці виправляються (ці змінні не повинні зберігатися після виходу з sqlplusсеансу):

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000

Показати всі таблиці

Потім ви можете використовувати щось подібне, щоб побачити всі назви таблиць:

SELECT table_name, owner, tablespace_name FROM all_tables;

Показати власні таблиці

Як згадує @Justin Cave, ви можете використовувати це для показу лише власних таблиць:

SELECT table_name FROM user_tables;

Не забувайте про перегляди

Майте на увазі, що деякі "таблиці" насправді можуть бути "переглядами", тому ви також можете спробувати запустити щось на зразок:

SELECT view_name FROM all_views;

Результати

Це має дати щось, що виглядає досить прийнятним, як:

результат


8
спасибі за «кращий перегляд» поради, але ви не overwritting pagesize 30з pagesize 1000?
Пабло Рекальде


18
    select object_name from user_objects where object_type='TABLE';

---------------- АБО ------------------

    select * from tab;

---------------- АБО ------------------

    select table_name from user_tables;



9

База даних Oracle для відображення назв усіх таблиць за допомогою запиту нижче

ВИБІР власника, ім'я таблиці ВІД dba_tables;

ВИБІР власника, ім'я таблиці ВІД усіх_таблиць;

ВИБІРТЕ ім’я таблиці від ВІДПРИМІЛЬНИХ користувачів;

докладніше: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html


8

З будь-яким із них ви можете вибрати:

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM DBA_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

6
select * from dba_tables

дає всі таблиці всіх користувачів лише у тому випадку, якщо користувач, з яким ви ввійшли в систему, має sysdbaпривілеї.


4
Це насправді не правильно. SYSDBA не потрібно. Ви можете отримати доступ до DBA_TABLES різними способами. 1.) Безпосереднє надання об'єкту користувачеві SYS. 2.) Надання вибору будь-якої СЛОВА піктограми користувачеві. 3.) Надання ролі SELECT_CATALOG_ROLE.
Марк Дж. Бобак


4

Ви можете використовувати словник даних Oracle для отримання інформації про об'єкти Oracle.

Список таблиць можна отримати різними способами:

select * 
from dba_tables

або наприклад:

select * 
from dba_objects 
where object_type = 'TABLE' 

Тоді ви можете отримати стовпці таблиць, використовуючи назву таблиці:

select * 
from dba_tab_columns

Тоді ви можете отримати список залежностей (тригери, перегляди тощо):

select * 
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name 

Тоді ви можете отримати текстове джерело цих об’єктів:

select * from dba_source

І ви можете використовувати USERабо ALLперегляди замість, DBAякщо хочете.


4

З переглядами:

SELECT owner, table_name as table_view
  FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
  FROM DBA_VIEWS

4

Ми можемо отримати всі таблиці, включаючи деталі стовпців, із запиту нижче:

SELECT * FROM user_tab_columns;

4

Нижче наведено коментований фрагмент запитів SQL з описом того, як можна скористатися параметрами:

-- 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;

2

Наступний запит перераховує лише необхідні дані, тоді як інші відповіді дали мені додаткові дані, які мене лише збентежили.

select table_name from user_tables;

2

Нова функція, доступна в SQLcl (це безкоштовний інтерфейс командного рядка для Oracle Database)

Tables псевдонім.

Ось кілька прикладів, що показують використання та додаткові аспекти функції. Спочатку підключіться до сеансу sqlкомандного рядка ( sql.exeу Windows). Рекомендується ввести цю конкретну команду sqlcl перед запуском будь-яких інших команд або запитів, які відображають дані.

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
..

Щоб знати, на що tablesйдеться псевдонім, ви можете просто скористатисяalias list <alias>

SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------

 select table_name "TABLES" from user_tables

Вам не потрібно визначати цей псевдонім, оскільки він за замовчуванням надходить у SQLcl. Якщо ви хочете перелічити таблиці з певної схеми, використовуючи новий визначений користувачем псевдонім і передаючи ім'я схеми як аргумент прив'язки, що відображається лише набір стовпців, ви можете зробити це, використовуючи

SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;

Після цього ви можете просто передати ім'я схеми як аргумент

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
..
..

Більш складний попередньо визначений псевдонім відомий як Tables2, який відображає кілька інших стовпців.

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

Щоб знати, який запит працює у фоновому режимі, введіть

alias list tables2

Це покаже вам трохи складніший запит разом із заздалегідь columnвизначеними визначеннями, які зазвичай використовуються в SQL * Plus.

Джефф Сміт пояснює більше про псевдонімами тут


1

Я шукав, щоб отримати список усіх імен стовпців, що належать до таблиці схеми, відсортованої за порядком ідентифікатора стовпця.

Ось запит, який я використовую: -

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;

1

Дійсно, список таблиць можливий за допомогою SQL queries.it можна зробити це також за допомогою інструментів, що дозволяють генерувати словники даних, такі як ERWIN , Toad Data Modeler або ERBuilder . За допомогою цих інструментів, крім імен таблиць, ви матимете поля, їх типи, такі об’єкти, як (тригери, послідовності, домен, представлення ...)

Нижче наведено наступні кроки для створення визначення таблиць:

  1. Ви повинні інженерувати свою базу даних
    • У програмі моделювання даних Toad: Меню -> Файл -> Інженер зворотного зв'язку -> Майстер зворотної інженерії
    • У моделювачі даних ERBuilder: Меню -> Файл -> інженер зворотного зв'язку

Ваша база даних відображатиметься в програмному забезпеченні як схема взаємозв'язку особи.

  1. Створіть свій словник даних, який буде містити ваше визначення таблиць
    • У програмі моделювання даних Toad: Меню -> Модель -> Створити звіт -> Запустити
    • У моделювачі даних ERBuilder: Меню -> Інструмент -> створення модельної документації

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.