Як я запитую базу даних Oracle для відображення назв усіх таблиць у ній?
Як я запитую базу даних Oracle для відображення назв усіх таблиць у ній?
Відповіді:
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
поєднує таблиці та синоніми і не повідомляє, кому належить об'єкт.
Запит user_tables
і dba_tables
не працював.
Цей зробив:
select table_name from all_tables
Перейшовши на крок далі, існує ще один вигляд під назвою cols (all_tab_columns), який може бути використаний для встановлення, які таблиці містять задану назву стовпця.
Наприклад:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
щоб знайти всі таблиці, назви яких починаються з EST, і стовпці, що містять CALLREF в будь-якому місці їхніх імен.
Це може допомогти при розробці, до яких стовпців ви хочете приєднатися, наприклад, залежно від умов іменування таблиці та стовпців.
select * from cols
і отримав 0 рядків.
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;
Це має дати щось, що виглядає досить прийнятним, як:
pagesize 30
з pagesize 1000
?
Простий запит для вибору таблиць для поточного користувача:
SELECT table_name FROM user_tables;
Спробуйте наведені нижче перегляди словника даних.
tabs
dba_tables
all_tables
user_tables
Спробуйте вибрати з user_tables, який перераховує таблиці, якими володіє поточний користувач.
База даних Oracle для відображення назв усіх таблиць за допомогою запиту нижче
ВИБІР власника, ім'я таблиці ВІД dba_tables; ВИБІР власника, ім'я таблиці ВІД усіх_таблиць; ВИБІРТЕ ім’я таблиці від ВІДПРИМІЛЬНИХ користувачів;
докладніше: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
дає всі таблиці всіх користувачів лише у тому випадку, якщо користувач, з яким ви ввійшли в систему, має sysdba
привілеї.
Я не знайшов відповіді, який би вказав на використання
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
тому вирішив додати і свою версію. Цей погляд фактично повертає більше, ніж DBA_TABLES, оскільки він також повертає об'єктні таблиці ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
Ви можете використовувати словник даних 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
якщо хочете.
Ми можемо отримати всі таблиці, включаючи деталі стовпців, із запиту нижче:
SELECT * FROM user_tab_columns;
Нижче наведено коментований фрагмент запитів 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;
Нова функція, доступна в 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.
Джефф Сміт пояснює більше про псевдонімами тут
Я шукав, щоб отримати список усіх імен стовпців, що належать до таблиці схеми, відсортованої за порядком ідентифікатора стовпця.
Ось запит, який я використовую: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
Дійсно, список таблиць можливий за допомогою SQL queries.it можна зробити це також за допомогою інструментів, що дозволяють генерувати словники даних, такі як ERWIN , Toad Data Modeler або ERBuilder . За допомогою цих інструментів, крім імен таблиць, ви матимете поля, їх типи, такі об’єкти, як (тригери, послідовності, домен, представлення ...)
Нижче наведено наступні кроки для створення визначення таблиць:
Ваша база даних відображатиметься в програмному забезпеченні як схема взаємозв'язку особи.
select * from all_all_tables
це додаткове "все" на початку дає додаткові 3 стовпці, які:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(як це робиться в MySQL)?