Oracle проверить существование таблицы
Как я могу запросить базу данных Oracle для отображения имен всех таблиц в ней?
ОТВЕТЫ
Ответ 1
Предполагается, что у вас есть доступ к представлению словаря данных DBA_TABLES . Если у вас нет этих привилегий, но они нуждаются в них, вы можете запросить, чтобы администратор базы данных явно предоставлял вам привилегии в этой таблице или что администратор базы данных предоставляет вам привилегию SELECT ANY DICTIONARY или SELECT_CATALOG_ROLE (любой из которых позволит вам для запроса любой таблицы словаря данных). Конечно, вы можете исключить некоторые схемы, такие как SYS и SYSTEM , которые имеют большое количество таблиц Oracle, которые вам, вероятно, не волнует.
В качестве альтернативы, если у вас нет доступа к DBA_TABLES , вы можете увидеть все таблицы, к которым ваша учетная запись имеет доступ, через представление ALL_TABLES :
Хотя это может быть подмножество таблиц, доступных в базе данных ( ALL_TABLES показывает вам информацию для всех таблиц, которым был предоставлен ваш пользователь).
Если вас интересуют только те таблицы, которые у вас есть, а не те, к которым у вас есть доступ, вы можете использовать USER_TABLES :
Так как USER_TABLES имеет только информацию о собственных таблицах, у нее нет столбца OWNER - владелец, по определению, вы.
Oracle также имеет ряд устаревших видов словарей данных - TAB , DICT , TABS и CAT например - которые могут быть использованы. В общем, я бы не предложил использовать эти устаревшие представления, если вам не нужно полностью использовать ваши сценарии для Oracle 6. Oracle не изменил эти представления за долгое время, поэтому у них часто возникают проблемы с новыми типами объектов. Например, представления TAB и CAT отображают информацию о таблицах, которые находятся в корзине пользователя, в то время как теги [DBA|ALL|USER]_TABLES все фильтруют их. CAT также показывает информацию о материализованных журналах просмотра с TABLE_TYPE в таблице "ТАБЛИЦА", которая вряд ли будет тем, что вы действительно хотите. DICT объединяет таблицы и синонимы и не говорит вам, кому принадлежит этот объект.
Ответ 2
Запрос user_tables и dba_tables не работает.
Это сделал:
Ответ 3
Идя еще на один шаг, существует другое представление, называемое cols (all_tab_columns), которое может использоваться для определения того, какие таблицы содержат заданное имя столбца.
чтобы найти все таблицы, имеющие имя, начинающееся с EST, и столбцы, содержащие CALLREF в любом месте их имен.
Это может помочь при разработке тех столбцов, к которым вы хотите присоединиться, например, в зависимости от ваших соглашений об именах таблиц и столбцов.
Ответ 4
Для лучшего просмотра с помощью sqlplus
Если вы используете sqlplus , вы можете сначала настроить несколько параметров для более удобного просмотра, если ваши столбцы становятся искалеченными (эти переменные не должны сохраняться после выхода из сеанса sqlplus ):
Показать все таблицы
Затем вы можете использовать что-то вроде этого, чтобы увидеть все имена таблиц:
Показать таблицы, которыми вы владеете
Как упоминает @Justin Cave, вы можете использовать это, чтобы отображать только те таблицы, которые у вас есть:
Не забывайте о представлениях
Имейте в виду, что некоторые "таблицы" могут быть "видами", поэтому вы также можете попробовать запустить что-то вроде:
Результаты
Это должно привести к тому, что выглядит довольно приемлемым, например:
Ответ 5
Простой запрос для выбора таблиц для текущего пользователя:
Ответ 6
Ответ 7
Попробуйте просмотреть словарные данные ниже.
Ответ 8
Существует 3 данных для этого
DBA_TABLES описывает все реляционные таблицы в базе данных.
Описание реляционных таблиц, доступных пользователю
USER_TABLES описывает реляционные таблицы, принадлежащие текущему пользователю. Это представление не отображает столбец ВЛАДЕЛЕЦ.
Ответ 9
Попробуйте выбрать user_tables, в котором перечислены таблицы, принадлежащие текущему пользователю.
Ответ 10
С помощью любого из них вы можете выбрать:
Ответ 11
База данных Oracle для отображения имен всех таблиц, используя запрос ниже
Ответ 12
предоставляет все таблицы всех пользователей только в том случае, если пользователь, с которым вы вошли в систему, имеет привилегии sysdba .
Ответ 13
Ниже приведен закомментированный фрагмент SQL-запросов, описывающий, как можно использовать параметры:
Ответ 14
Вы можете использовать Oracle Data Dictionary, чтобы получить информацию об объектах oracle.
Вы можете получить список таблиц по-разному:
Затем вы можете получить столбцы таблицы, используя имя таблицы:
Затем вы можете получить список зависимостей (триггеры, представления и т.д.):
Затем вы можете получить текстовый источник этих объектов:
И вы можете использовать USER или ALL представления вместо DBA , если хотите.
Ответ 15
Я не нашел ответа, который указывал бы на использование
Ответ 16
Ответ 17
Мы можем получить все таблицы, включая детали столбцов, из запроса ниже:
Ответ 18
Следующий запрос содержит только список необходимых данных, тогда как другие ответы дали мне дополнительные данные, которые меня только смутили.
Ответ 19
Новая функция, доступная в SQLcl (это бесплатный интерфейс командной строки для Oracle Database),
Tables псевдоним.
Вот несколько примеров, показывающих использование и дополнительные аспекты функции. Сначала подключитесь к sql.exe командной строки sql ( sql.exe в windows). Рекомендуется вводить эту конкретную команду sqlcl перед выполнением любых других команд или запросов, которые отображают данные.
SQL> tables
Чтобы узнать, на что ссылается псевдоним tables , вы можете просто использовать alias List<alias>
Вам не нужно определять этот псевдоним, так как он используется по умолчанию в SQLcl. Если вы хотите получить список таблиц из определенной схемы, используя новый пользовательский псевдоним и передавая имя схемы в качестве аргумента привязки с отображением только набора столбцов, вы можете сделать это, используя
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
После этого вы можете просто передать имя схемы в качестве аргумента.
SQL> tables_schema HR
Более сложный предопределенный псевдоним известен как Tables2 , который отображает несколько других столбцов.
Чтобы узнать, какой запрос выполняется в фоновом режиме, введите
Это покажет вам немного более сложный запрос вместе с предопределенными определениями column обычно используемыми в SQL * Plus.
Джефф Смит объясняет больше об псевдонимах здесь
Ответ 20
Я искал список всех имен столбцов, принадлежащих таблице схемы, отсортированный по порядку идентификатора столбца.
Вот запрос, который я использую: -
Ответ 21
Действительно, список таблиц можно получить с помощью запросов SQL. Это можно сделать также с помощью инструментов, которые позволяют создавать словари данных, такие как ERWIN, Toad Data Modeler или ERBuilder. С этими инструментами, в дополнение к именам таблиц, у вас будут поля, их типы, объекты типа (триггеры, последовательности, домен, представления. )
Ниже приведены шаги, которые необходимо выполнить для создания определения таблиц:
- Вы должны перепроектировать вашу базу данных
- В Toad Data Modeler: Меню → Файл → Реверс инжиниринг → Мастер реинжиниринга
- В ERBuilder Data Modeler: Меню → Файл → Обратный инженер
Ваша база данных будет отображаться в программном обеспечении в виде диаграммы отношений сущностей.
Я пишу некоторые сценарии миграции для базы данных Oracle и надеялся, что Oracle имеет что-то похожее на MySQL IF EXISTS строительство.
в частности, всякий раз, когда я хочу удалить таблицу в MySQL, я делаю что-то вроде
таким образом, если таблица не существует, DROP не выдает ошибку, и сценарий может продолжаться.
имеет ли Oracle аналогичный механизм? Я понимаю, что могу использовать следующий запрос, чтобы проверить, существует ли таблица или нет!--6-->
но синтаксис для связывания этого вместе с DROP ускользает от меня.
лучший и самый эффективный способ-поймать исключение" таблица не найдена": это позволяет избежать накладных расходов на проверку, существует ли таблица дважды; и не страдает от проблемы, что если падение не удается по какой-то другой причине (это может быть важно) исключение все еще вызывается вызывающему абоненту:
дополнительное соглашение Для справки, вот эквивалентные блоки для другого объекта типы:
Ссылка На Базу Данных
это для проверки того, существует ли таблица в текущей схеме. Для проверки того, существует ли данная таблица в другой схеме, вам придется использовать all_tables вместо user_tables и добавьте условие all_tables.owner = upper('schema_name')
Я искал то же самое, но я закончил писать процедуру, чтобы помочь мне:
надеюсь, что это помогает
просто хотел опубликовать полный код, который создаст таблицу и отбросит ее, если она уже существует, используя код Джеффри (слава Ему, а не мне!).
С SQL * PLUS вы также можете использовать команду WHENEVER SQLERROR:
С CONTINUE NONE сообщается об ошибке, но сценарий будет продолжен. С EXIT SQL.SQLCODE скрипт будет завершен в случае ошибки.
в oracle нет "DROP TABLE IF EXISTS", вам нужно будет сделать инструкцию select.
попробуйте это (я не разбираюсь в синтаксисе oracle, поэтому, если мои переменные ify, пожалуйста, простите меня):
другой метод-определить исключение, а затем только поймать это исключение, позволяя всем другим распространяться.
эта функция проверяет, что строка входного параметра является квалифицированным идентификатором SQL существующего объекта SQL.
к сожалению, нет, нет такой вещи, как падение, если существует, или создать, если не существует
вы можете написать сценарий plsql, чтобы включить в него логику.
Я не очень разбираюсь в синтаксисе Oracle, но я думаю, что сценарий @Erich будет чем-то вроде этого.
вы всегда можете поймать ошибку самостоятельно.
считается плохой практикой злоупотреблять этим, подобно пустым catch () на других языках.
Я предпочитаю указывать таблицу и владельца схемы.
следите за чувствительностью к регистру, а также. (см. "верхний" пункт ниже).
Я бросил пару разных объектов, чтобы показать, что это можно использовать в местах, кроме таблиц.
и пример таблицы:
/ / выполняя этот код, проверяет, существует ли таблица, а затем создает таблицу max. это просто работает в одной компиляции
Читайте также: