Удалить таблицу oracle sql

Обновлено: 23.11.2024

В этом руководстве по Oracle объясняется, как использовать оператор Oracle DROP TABLE с синтаксисом и примерами.

Описание

Инструкция Oracle DROP TABLE позволяет удалить или удалить таблицу из базы данных Oracle.

Синтаксис

Синтаксис оператора Oracle DROP TABLE:

Параметры или аргументы

имя_схемы Имя схемы, которой принадлежит таблица. table_name Имя таблицы, которую необходимо удалить из базы данных Oracle. КАСКАДНЫЕ ОГРАНИЧЕНИЯ Необязательно. Если указано, все ограничения ссылочной целостности также будут удалены. ОЧИСТКА Опционально. Если указано, таблица и зависимые от нее объекты будут удалены из корзины, и вы не сможете восстановить таблицу. Если не указано иное, таблица и зависимые от нее объекты помещаются в корзину и при необходимости могут быть восстановлены позже.

  • Если для table_name существуют ограничения ссылочной целостности и вы не укажете параметр CASCADE CONSTRAINTS, инструкция DROP TABLE вернет ошибку, и Oracle не удалит таблицу. .

Пример

Давайте рассмотрим пример, показывающий, как удалить таблицу в Oracle с помощью оператора DROP TABLE.

В этом примере Oracle DROP TABLE будет удалена таблица с именем customers.

Очистить

Давайте посмотрим, как использовать параметр PURGE с оператором DROP TABLE в Oracle.

При выполнении оператора DROP TABLE в Oracle можно указать параметр PURGE. Параметр ОЧИСТИТЬ очистит таблицу и ее зависимые объекты, чтобы они не отображались в корзине. Риск указания опции PURGE состоит в том, что вы не сможете восстановить таблицу. Однако преимущество использования PURGE заключается в том, что вы можете гарантировать, что конфиденциальные данные не останутся в корзине.

Этот оператор DROP TABLE удалит таблицу с именем customers и выполнит PURGE, чтобы освободить пространство, связанное с таблицей customers. Другими словами, таблица customers не помещается в корзину и, следовательно, не может быть восстановлена ​​позже при необходимости.

Используйте оператор DROP TABLE, чтобы переместить таблицу или таблицу объектов в корзину или полностью удалить таблицу и все ее данные из базы данных.

Если вы не укажете предложение PURGE, оператор DROP TABLE не приведет к освобождению пространства обратно в табличное пространство для использования другими объектами, и пространство продолжит учитываться в квоте пространства пользователя.

Для внешней таблицы этот оператор удаляет только метаданные таблицы в базе данных. Это не влияет на фактические данные, которые находятся за пределами базы данных.

При удалении таблицы, являющейся частью кластера, она перемещается в корзину. Однако если вы впоследствии удалите кластер, таблица будет удалена из корзины, и ее больше нельзя будет восстановить с помощью операции FLASHBACK TABLE.

Удаление таблицы делает недействительными зависимые объекты и удаляет объектные привилегии для таблицы. Если вы хотите пересоздать таблицу, вы должны повторно предоставить объектные привилегии для таблицы, заново создать индексы, ограничения целостности и триггеры для таблицы, а также повторно указать параметры ее хранения. Усечение не имеет ни одного из этих эффектов. Поэтому удаление строк с помощью оператора TRUNCATE может быть более эффективным, чем удаление и повторное создание таблицы.

CREATE TABLE и ALTER TABLE для получения информации о создании и изменении таблиц

TRUNCATE и DELETE для получения информации об удалении данных из таблицы

FLASHBACK TABLE для получения информации о извлечении удаленной таблицы из корзины

Таблица должна находиться в вашей собственной схеме или у вас должна быть системная привилегия DROP ANY TABLE.

Вы можете выполнять операции DDL (например, ALTER TABLE , DROP TABLE , CREATE INDEX ) с временной таблицей, только если к ней не привязан ни один сеанс. Сеанс привязывается к временной таблице путем выполнения операции INSERT над таблицей. Сеанс становится несвязанным с временной таблицей путем выполнения оператора TRUNCATE или при завершении сеанса, или, для временной таблицы, связанной с транзакцией, путем выполнения оператора COMMIT или ROLLBACK.

Укажите схему, содержащую таблицу. Если вы опустите schema , Oracle Database будет считать, что таблица находится в вашей собственной схеме.

Укажите имя удаляемой таблицы. База данных Oracle автоматически выполняет следующие операции:

Все строки из таблицы удаляются.

Все индексы таблиц и индексы доменов удаляются, а также любые триггеры, определенные для таблицы, независимо от того, кто их создал или в чьей схеме они содержатся. Если таблица разбита на разделы, все соответствующие разделы локального индекса также удаляются.

Все таблицы хранения вложенных таблиц и больших объектов таблицы удаляются.

При удалении таблицы, секционированной по диапазонам, хэшам или спискам, база данных удаляет все разделы таблицы.Если вы удаляете таблицу с составными разделами, все разделы и подразделы также удаляются.

Когда вы удаляете многораздельную таблицу с помощью ключевого слова PURGE, инструкция выполняется как серия подтранзакций, каждая из которых удаляет подмножество разделов или подразделов и их метаданные. Такое разделение операции удаления на подтранзакции оптимизирует обработку внутренних системных ресурсов (например, библиотечного кэша), особенно для удаления очень больших секционированных таблиц. Как только фиксируется первая подтранзакция, таблица помечается как UNUSABLE. Если какая-либо из подтранзакций не удалась, единственная операция, разрешенная для таблицы, — это еще одна операция DROP TABLE. ОЧИСТКА заявление. Такая инструкция возобновит работу с того места, где предыдущая инструкция DROP TABLE не удалась, при условии, что вы исправили все ошибки, обнаруженные предыдущей операцией.

Вы можете составить список таблиц, помеченных как НЕИСПОЛЬЗУЕМЫЕ с помощью такой операции удаления, запросив столбец состояния *_TABLES , *_PART_TABLES , *_ALL_TABLES или *_OBJECT_TABLES представлений словаря данных, в зависимости от ситуации.

Руководство администратора базы данных Oracle для получения дополнительной информации об удалении секционированных таблиц.

Для индексно-организованной таблицы все сопоставленные таблицы, определенные в индексно-организованной таблице, удаляются.

Для индекса домена вызываются соответствующие процедуры удаления. Дополнительную информацию об этих подпрограммах см. в Руководстве разработчика Oracle Data Cartridge.

Если с таблицей связаны какие-либо типы статистики, то база данных отменяет связь типов статистики с предложением FORCE и удаляет всю пользовательскую статистику, собранную с помощью этого типа статистики.

ASSOCIATE STATISTICS и DISASSOCIATE STATISTICS для получения дополнительной информации о ассоциациях типов статистики

Если таблица не является частью кластера, база данных возвращает все блоки данных, выделенные для таблицы и ее индексов, в табличные пространства, содержащие таблицу и ее индексы.

Чтобы удалить кластер и все его таблицы, используйте оператор DROP CLUSTER с предложением INCLUDING TABLES, чтобы не удалять каждую таблицу по отдельности. См. УДАЛЕНИЕ КЛАСТЕРА.

Если таблица является базовой для представления, контейнером или главной таблицей материализованного представления или если на нее есть ссылка в хранимой процедуре, функции или пакете, то база данных делает эти зависимые объекты недействительными, но не удаляет их. их. Вы не можете использовать эти объекты, пока не создадите таблицу заново или не удалите и не создадите объекты заново, чтобы они больше не зависели от таблицы.

Если вы решите воссоздать таблицу, она должна содержать все столбцы, выбранные подзапросами, которые изначально использовались для определения материализованных представлений, и все столбцы, на которые ссылаются хранимые процедуры, функции или пакеты. Любым пользователям, которым ранее были предоставлены объектные привилегии для представлений, хранимых процедур, функций или пакетов, не нужно повторно предоставлять эти привилегии.

Если таблица является главной таблицей для материализованного представления, то к материализованному представлению по-прежнему можно запрашивать, но его нельзя обновить, пока таблица не будет создана заново, чтобы она содержала все столбцы, выбранные определяющим запросом материализованное представление.

Если в таблице есть журнал материализованного представления, база данных удаляет этот журнал и любую другую информацию об обновлении INSERT прямого пути, связанную с таблицей.

Ограничение на удаление таблиц Вы не можете напрямую удалить таблицу хранения вложенной таблицы. Вместо этого вы должны удалить столбец вложенной таблицы, используя ALTER TABLE. Предложение DROP COLUMN.

Укажите CASCADE CONSTRAINTS, чтобы удалить все ограничения ссылочной целостности, относящиеся к первичным и уникальным ключам в удаленной таблице. Если вы опустите это предложение и такие ограничения ссылочной целостности существуют, база данных вернет ошибку и не удалит таблицу.

Укажите PURGE, если вы хотите удалить таблицу и освободить связанное с ней пространство за один шаг. Если вы укажете PURGE , база данных не поместит таблицу и ее зависимые объекты в корзину.

Вы не можете откатить инструкцию DROP TABLE с предложением PURGE, а также не можете восстановить таблицу, если вы удалили ее с помощью предложения PURGE.

Использование этого предложения эквивалентно сначала удалению таблицы, а затем ее очистке из корзины. Этот пункт позволяет вам сэкономить один шаг в процессе. Это также обеспечивает повышенную безопасность, если вы хотите предотвратить появление конфиденциальных материалов в корзине.

Руководство администратора базы данных Oracle для получения информации о корзине и соглашениях об именах для объектов в корзине

Вывод: в этом руководстве вы узнаете, как использовать оператор Oracle DELETE для удаления одной или нескольких строк из таблицы.

Чтобы удалить одну или несколько строк из таблицы, используйте оператор Oracle DELETE следующим образом:

В этом заявлении

  • Сначала вы указываете имя таблицы, из которой хотите удалить данные.
  • Во-вторых, вы указываете, какую строку следует удалить, используя условие в предложении WHERE. Если вы опустите предложение WHERE, оператор Oracle DELETE удалит все строки из таблицы.

Обратите внимание, что быстрее и эффективнее использовать оператор TRUNCATE TABLE для удаления всех строк из большой таблицы.

Примеры DELETE в Oracle

Давайте создадим новую таблицу с именем sales , содержащую все данные о заказах на продажу, для демонстрационных целей:

Этот оператор создал таблицу продаж и скопировал данные из таблиц orders и order_items в образце базы данных в таблицу продаж.

A) Oracle DELETE — удалить одну строку из таблицы

Следующий оператор удаляет строку, идентификатор заказа которой равен 1, а идентификатор элемента равен 1:

Oracle вернул следующее сообщение:

B) Oracle DELETE — удалить несколько строк из таблицы

Следующий оператор удаляет все строки, идентификатор заказа которых равен 1:

И Oracle вернул следующее сообщение:

C) Oracle DELETE — удалить все строки из таблицы

В следующем примере удаляются все строки из таблицы продаж:

И мы удалили 625 строк.

D) Oracle DELETE — каскадное удаление

На практике вы часто удаляете строку из таблицы, которая имеет отношение внешнего ключа к строкам из других таблиц.

Например, вы хотите удалить заказ на продажу с идентификатором 1 из таблицы заказов, а также удалить все позиции, связанные с идентификатором заказа 1, из таблицы order_items. Как правило, вы можете думать о двух операторах DELETE следующим образом:

Обратите внимание, что оператор COMMIT WORK обеспечивает выполнение обоих операторов DELETE по принципу «все или ничего», что предотвращает появление потерянных строк в таблице order_items в случае сбоя второго оператора DELETE.

Однако в этом нет необходимости, если вы знаете, как правильно настроить ограничение таблицы.

В этом случае при создании таблицы order_items вы определяете ограничение внешнего ключа с параметром DELETE CASCADE следующим образом:

Поступая таким образом, всякий раз, когда вы удаляете строку из таблицы заказов, например:

Все строки, идентификатор заказа которых равен 1 в таблице order_items, также автоматически удаляются системой базы данных.

В этом руководстве вы узнали, как использовать оператор Oracle DELETE для удаления строк из таблицы.

В этом учебном пособии Oracle объясняется, как использовать оператор Oracle DELETE с синтаксисом, примерами и практическими упражнениями.

Описание

Инструкция Oracle DELETE используется для удаления одной или нескольких записей из таблицы в Oracle.

Синтаксис

Синтаксис инструкции DELETE в Oracle/PLSQL:

Параметры или аргументы

table Таблица, из которой вы хотите удалить записи. ГДЕ условия Необязательный. Условия, которые должны быть соблюдены, чтобы записи были удалены. Если условия не указаны, то все записи из таблицы будут удалены.

  • Вам не нужно перечислять поля в операторе Oracle DELETE, так как вы удаляете всю строку из таблицы.

Пример — использование одного условия

Давайте рассмотрим пример простого запроса Oracle DELETE, в котором у нас есть только одно условие в операторе DELETE.

В этом примере Oracle DELETE будут удалены все записи из таблицы customers, где last_name — Smith.

Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, выполнив следующую инструкцию Oracle SELECT перед выполнением удаления.

Пример — использование двух условий

Давайте рассмотрим пример Oracle DELETE, где у нас всего два условия в операторе DELETE.

В этом примере Oracle DELETE будут удалены все записи из таблицы customers, где last_name — "Андерсон", а customer_id больше 25. .

Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, выполнив следующую инструкцию Oracle SELECT перед выполнением удаления.

Пример — использование предложения EXISTS

Вы также можете выполнять более сложные операции удаления.

Возможно, вы захотите удалить записи в одной таблице на основе значений в другой таблице. Поскольку вы не можете указать более одной таблицы в предложении Oracle FROM при выполнении удаления, вы можете использовать предложение Oracle EXISTS.

В этом примере Oracle DELETE будут удалены все записи в таблице suppliers, где есть запись в таблице customers, чей customer_id больше 25, а customer_id соответствует supplier_id.

Если вы хотите определить количество строк, которые будут удалены, вы можете запустить следующую инструкцию Oracle SELECT перед выполнением удаления.

Часто задаваемые вопросы

Вопрос: как мне написать инструкцию Oracle DELETE для удаления всех записей в таблице A, чьи данные в полях field1 и field2 НЕ соответствуют данным в fieldx и fieldz таблицы B?

Ответ: Вы можете попробовать что-то подобное для своего оператора Oracle DELETE:

На основании таблицы contacts удалите все записи из таблицы contacts, которые проживают в городе «Лас-Вегас» и чье first_name это Джейн.

Следующая инструкция Oracle DELETE удалит эти записи из таблицы contacts:

На основе таблицы contacts удалить все записи из таблицы contacts, чей contact_id больше или равен 5000 и меньше 6000 .

Следующая инструкция Oracle DELETE удалит эти записи из таблицы contacts:

Читайте также: