Очистить таблицу Oracle sql

Обновлено: 30.06.2024

-Где находится имя таблицы, и вы должны быть владельцем таблицы или иметь системные привилегии Drop any TABLE для усечения таблицы
-Хранилище удаляется по умолчанию, если оно даже не указано. Если вы хотите сэкономить место, вы можете сохранить хранилище, а затем использовать его повторно

Если вы усекаете таблицу другой схемы, используйте так

Как предоставить усеченную таблицу в оракуле

В Oracle нет привилегии усечения таблиц. Вам необходимо предоставить привилегию Drop any table, чтобы предоставить усеченную таблицу в оракуле. Удаление любой таблицы дает множество других привилегий. Так что не во всех случаях это возможно. Вы можете решить эту проблему, создав процедуру и разрешив выполнение этой процедуры. Давайте разберемся на примере

Предположим, вы хотите передать усеченную таблицу одного пользователя USER1 другому пользователю USER2

Если вы попытаетесь просто обрезать таблицу, вы получите сообщение об ошибке

Теперь попробуем сделать это через процедуру и предоставление привилегий на нее

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

Каскад усечения таблицы

  • До Oracle 12c нельзя было обрезать родительскую таблицу включенного ограничения внешнего ключа. Если вы попробуете, вы получите ORA-02266. Вы должны отключить ограничение перед усечением таблицы. Исключением является то, что вы можете обрезать таблицу, если ограничение целостности является самореферентным.
  • В Oracle 12c R1 компания Oracle представила предложение Cascade для Truncate. Мы должны указать CASCADE, позволяющий рекурсивно усекать таблицы в иерархии. Если вы опустите это предложение и существуют такие ограничения ссылочной целостности, то база данных вернет ошибку и не усекает таблицу. Давайте разберемся с этой усеченной таблицей с каскадом на примере

Важно отметить, что ограничения внешнего ключа должны иметь ON DELETE CASCADE, чтобы это работало. Важно отметить, что усечение таблицы с каскадом не только удаляет данные только из таблицы DEPT, но также удаляет таблицу EMP.

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

Введение в оператор Oracle TRUNCATE TABLE

Если вы хотите удалить все данные из таблицы, используйте оператор DELETE без предложения WHERE следующим образом:

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

Oracle представил оператор TRUNCATE TABLE, который позволяет удалять все строки из большой таблицы.

Следующее иллюстрирует синтаксис оператора Oracle TRUNCATE TABLE:

По умолчанию, чтобы удалить все строки из таблицы, вы указываете имя таблицы, которую хотите усечь, в предложении TRUNCATE TABLE:

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

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

В этом случае оператор TRUNCATE TABLE CASCADE удаляет все строки из table_name и рекурсивно усекает связанные таблицы в цепочке.

Обратите внимание, что оператор TRUNCATE TABLE CASCADE требует, чтобы ограничения внешнего ключа, определенные с помощью предложения ON DELETE CASCADE, работали.

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

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

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

Примеры Oracle TRUNCATE TABLE

Давайте рассмотрим несколько примеров использования оператора TRUNCATE TABLE.

A) Простой пример Oracle TRUNCATE TABLE

Следующий оператор создает таблицу с именем customers_copy и копирует данные из таблицы клиентов в тестовую базу данных:

Чтобы удалить все строки из таблицы customers_copy, используйте следующий оператор TRUNCATE TABLE:

B) Пример Oracle TRUNCATE TABLE CASCADE

Сначала создадим таблицы quotations и quotation_items для демонстрации:

Далее вставьте несколько строк в эти две таблицы:

Затем усеките таблицу котировок:

Выполнение оператора завершилось неудачно, и Oracle вернул следующую ошибку:

Чтобы это исправить, добавьте предложение CASCADE в оператор TRUNCATE TABLE выше:

Этот оператор удалил данные не только из таблицы котировок, но и из таблицы quotation_items.

Наконец, проверьте, удалены ли данные как из цитат, так и из quotation_items:

Обратите внимание, что если бы мы не указали ON DELETE CASCADE для ограничения fk_quotation, приведенный выше оператор TRUNCATE TABLE CASCADE не удался.

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

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

Описание

Инструкция TRUNCATE TABLE используется для удаления всех записей из таблицы в Oracle. Он выполняет ту же функцию, что и оператор DELETE, но без предложения WHERE.

Синтаксис

Синтаксис оператора TRUNCATE TABLE в Oracle/PLSQL:

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

имя_схемы Необязательно. Если указано, это имя схемы, к которой принадлежит таблица. table_name Таблица, которую вы хотите обрезать. СОХРАНИТЬ МАТЕРИАЛИЗОВАННЫЙ ЖУРНАЛ ПРОСМОТРА Необязательно. Если указано, журнал материализованного представления будет сохранен при усечении таблицы. Это поведение по умолчанию. ОЧИСТКА МАТЕРИАЛИЗОВАННОГО ЖУРНАЛА ПРОСМОТРА Опционально. Если указано, журнал материализованного представления будет очищаться при усечении таблицы. ДОПОЛНИТЕЛЬНОЕ ХРАНЕНИЕ Опционально. Если указано, все хранилище для усеченных строк будет освобождено, кроме пространства, которое было выделено MINEXTENTS. Это поведение по умолчанию. ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ ХРАНЕНИЯ Необязательно. Если указано, все хранилище для усеченных строк останется выделенным для таблицы.

Пример

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

Давайте рассмотрим пример использования оператора TRUNCATE TABLE в Oracle/PLSQL.

В этом примере будет усечена таблица с именем customers и удалены все записи из этой таблицы.

Это будет эквивалентно следующему оператору DELETE в Oracle:

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

Давайте рассмотрим еще один пример, в котором мы ставим перед именем таблицы префикс имени схемы.

В этом примере будет усечена таблица с именем suppliers в схеме с именем totn. Прежде чем вы сможете обрезать таблицу в другой схеме, вы должны иметь необходимые привилегии, такие как DROP ANY TABLE.

Вопрос: мне нужно удалить все данные из таблицы Oracle. Как удалить все строки в таблице?

Ответ. Существует два способа удалить все строки из таблицы Oracle: команда truncate (рекомендуется) или удалить синтаксис DML. . Также см. мои заметки о различных способах удаления больших объемов строк данных, удаляющих большие объемы данных из таблицы Oracle.

  • truncate table: мгновенно удаляет все строки из таблицы. Команда truncate table работает очень быстро, потому что строки физически не удаляются из таблицы. Кроме того, усеченная таблица является постоянной, и команда ROLLBACK не разрешена.

обрезать таблицу fred;

  • удалить из tablename: Традиционный DML удалить можно использовать для удаления всех строк в таблице. При этом удаляются все строки, поскольку в операторе удаления нет предложения where. Также обратите внимание, что при удалении всех данных таблицы вам может потребоваться выделить очень большой сегмент UNDO. Отмена используется для хранения всех удаленных строк таблицы на случай неожиданного прерывания или отката.

изменить набор сеансов rollback_segment = 'HUGE_UNDO';

удалить из fred;
совершить;

Получите полную
информацию о настройке Oracle SQL

Знаменитая книга "Расширенная настройка Oracle SQL. Полное руководство" содержит ценную информацию о настройке Oracle SQL. Эта книга включает сценарии и инструменты для повышения производительности Oracle 11g, и вы можете купить ее со скидкой 30 % непосредственно у издателя.


Бурлесон — американская команда


Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

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

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:


и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

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