Как мне перечислить все таблицы в схеме в Oracle SQL?Как мне перечислить все таблицы в схеме в Oracle SQL?
ответ
Чтобы увидеть все таблицы в другой схеме, вы должны иметь один или несколько из следующих системных привилегий:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
или большой молот, АБД роль.
С любой из них, вы можете выбрать:
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]'
Наконец, вы всегда можете запросить словарь данных для собственных таблиц, так как ваши права на ваши таблицы не могут быть отменены (по 10 г):
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
Вы можете запросить USER_TABLES
select TABLE_NAME from user_tables
Это все таблицы в ВАШЕЙ схеме, а не все таблицы в схеме A. Кроме того, в представлениях словаря данных * _TABLES (DBA_TABLES, ALL_TABLES, USER_TABLES) есть представления. –
заменить «include views» на «может включать в себя версии в версиях Oracle версии». –
@ Adam Musch Протестировано с использованием Oracle 10g R2, оно не возвратило представления. – Sathya
Попробуйте заменить? с именем схемы
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
Это больше агностик базы данных, и поэтому я думаю, что этот тип решения лучше по сравнению со всеми альтернативами. Я думаю, что INFORMATION_SCHEMA работает практически со всеми основными базами данных, которые я видел. Хотя некоторые отличаются тем, какую информацию вы можете получить, по крайней мере, это постоянное место для поиска. Однако из-за быстрого поиска в Интернете кажется, что Oracle - это единственная база данных, которая не поддерживает Information_Schema, хотя она является частью стандарта SQL-92. – Kibbee
Конечно, OP специально запросил решение Oracle ... – DCookie
Посмотрите на мою simple utility, чтобы показать некоторую информацию о дб схеме. Он основан на: Reverse Engineering a Data Model Using the Oracle Data Dictionary
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
Schemanaame должно быть в UPPERCASE –
Это будет отображаться только * все * таблицы в YOURSCHEMA, если они будут выполняться YOURSCHEMA или управляться пользователем с привилегиями, упомянутыми Адамом Мушем. В противном случае он просто показывает таблицы в YOURSCHEMA, которым мы получили привилегии. – APC
Если вы обращаетесь к Oracle с JDBC (Java), вы можете использовать DatabaseMetadata класс. Если вы обращаетесь к Oracle с помощью ADO.NET, вы можете использовать аналогичный подход.
Если вы обращаетесь к Oracle с ODBC, вы можете использовать функцию SQLTables.
В противном случае, если вам просто нужна информация в SQLPlus или аналогичном клиенте Oracle, один из указанных выше вопросов будет выполнен. Например:
select TABLE_NAME from user_tables
Если вы вошли в систему обычного пользователя без разрешения DBA вы можете использовать следующую команду, чтобы просмотреть все таблицы и представления вашей собственной схемы.
select * from tab;
select * from cat;
он покажет все таблицы в схеме кошки синоним user_catalog
select TABLE_NAME from user_tables;
Выше запроса даст вам имена всех таблиц, присутствующих в этом пользователе;
select * from user_tables;
(показывая все таблицы)
Если вам нужно, чтобы получить размер таблицы, а также, это будет удобно:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
ВЫБЕРИТЕ table_name, владелец ОТ ALL_TABLES где owner = 'schema_name' order by table_name
«самый полный ответ», кроме использования '% _OBJECTS' вместо'% _TABLES'. – APC
Я помню, в 9i, что представления будут перечислены в% _TABLES - так, например, попытка автоматизировать опорожнение схемы приведет к появлению таких выражений, как DROP TABLE REALLY_A_VIEW CASCADE CONSTRAINTS. Таким образом, вам придется либо удалить представления с помощью MINUS/NOT IN/NOT EXISTS, либо перейти снова на% _OBJECTS. Плюс, против% _OBJECTS оставляет мучительный намек на то, что еще может быть там! –
В запросе абсолютно нет необходимости в 'DISTINCT'. 'owner, object_name' уникален в' ALL_OBJECTS' –