Как мне перечислить все таблицы в схеме в Oracle SQL?
Как мне перечислить все таблицы в схеме в Oracle SQL?
Ответы:
Чтобы увидеть все таблицы в другой схеме, вам необходимо иметь одну или несколько из следующих системных привилегий:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
или большой молот, роль DBA.
С любым из них вы можете выбрать:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Без этих системных привилегий вы можете видеть только таблицы, к которым вам предоставлен определенный уровень доступа, напрямую или через роль.
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Наконец, вы всегда можете запросить словарь данных для ваших собственных таблиц, так как ваши права на ваши таблицы не могут быть отозваны (начиная с 10g):
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
DISTINCT
запросе нет абсолютно никакой необходимости . owner, object_name
является уникальным вALL_OBJECTS
owner, object_name
не является уникальным в dba_objects; В этом представлении отображаются тела пакета и пакеты, а таблицы и индексы находятся в разных пространствах имен.
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
Вы можете запросить USER_TABLES
select TABLE_NAME from user_tables
Попробуйте это заменить? с вашим именем схемы
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
Если вы обращаетесь к Oracle через JDBC (Java), вы можете использовать класс DatabaseMetadata . Если вы обращаетесь к Oracle через ADO.NET, вы можете использовать аналогичный подход.
Если вы обращаетесь к Oracle через ODBC, вы можете использовать функцию SQLTables .
В противном случае, если вам просто нужна информация в SQLPlus или аналогичном клиенте Oracle, подойдет один из уже упомянутых запросов. Например:
select TABLE_NAME from user_tables
select * from cat;
он покажет все таблицы в вашей схеме cat синоним user_catalog
Вы можете напрямую запустить второй запрос, если знаете имя владельца.
- Во-первых, вы можете выбрать, какие существуют все ВЛАДЕЛЬЦЫ:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
- Затем вы можете увидеть таблицы под этим владельцем:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
Посмотрите на мою простую утилиту, чтобы показать некоторую информацию о схеме БД. Он основан на: обратном проектировании модели данных с использованием словаря данных Oracle
Если вам также нужно получить размер таблицы, это будет удобно:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
%_OBJECTS
вместо%_TABLES
.