Как удалить таблицу в oracle
Перейти к содержимому

Как удалить таблицу в oracle

  • автор:

DROP TABLE ОПЕРАТОР

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

Синтаксис

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

DROP TABLE [schema_name].table_name
[ CASCADE CONSTRAINTS ]
[ PURGE ];

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

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

Примечание

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

Пример

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

Быстрая очистка таблиц Oracle. Выражение TRUNCATE TABLE

Довольно-таки часто при работе с СУБД Oracle возникает необходимость удалить все данные из таблицы, причем максимально быстро. Кроме того, надо физически освободить место на носителе.

С помощью выражения delete можно просто удалить записи из таблицы. Но это не всегда будет достаточно быстро и не освободит место на носителе. Для выполнения поставленной задачи хорошо подходит выражение TRUNCATE TABLE — работает быстро, чистит чисто.
В простейшем случае синтаксист такой:

Более сложные синтаксические конструкции смотрите в документации Oracle® Database SQL Reference.

При использовании truncate table, можно столкнуться с такой ошибкой:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
Эта ошибка появляется, если на таблицу, которую Вы хотите очистить, ссылаются другие таблицы (т.е. используются foreign keys). Причем, эта ошибка появляется даже в том случае, если в таблицах нет записей.

Чтобы решить это ограничение Oracle, перед выполнением TRUNCATE TABLE надо отключить все foreign keys, выполнить очистку, после чего ключи включить.
Чтобы найти все foreign keys, можно выполнить такой запрос:

Получить эту же информацию можно еще и таким запросом:

Узнав все foreign keys и таблицы, в которых они находятся, Вы их можете отключить.
Это можно сделать следующим выражением:

После отключения foreign keys можно выполнить очистку — TRUNCATE TABLE. А после этого надо не забыть включить отключенные ключи:

Как видите, даже, казалось бы, у простого выражения Oracle, есть свои особенности.

Комментарии.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: , , ,
.

SQL-Ex blog

В ранних версиях SQL Server (до 2017) при удалении несуществующей таблицы (DROP TABLE t1;) вы получали сообщение об ошибке:
Не удалось удалить таблицу «t1″, так как она не существует или отсутствуют разрешения.»

В рамках интерактивного (чистого) SQL избежать возникновения ошибки в этом случае не получалось. Однако проблема легко решается процедурно (T-SQL):

IF object_id('t1') IS NOT NULL 
DROP TABLE t1;

Встроенная функция object_id возвращает идентификатор объекта, заданного именем, или же NULL, если такого имени не существует.
И вот в SQL Server 2017 появился оператор DROP TABLE IF EXISTS, который не вызывает ошибки, если удаляемой таблицы не существует, например:

DROP TABLE IF EXISTS t1;

Теперь предположим, что нам нужно удалить связанные таблицы. Рассмотрим следующий пример:

CREATE TABLE t1(id INT IDENTITY PRIMARY KEY); 
CREATE TABLE t2(id INT IDENTITY PRIMARY KEY,
t1_id INT REFERENCES t1);
GO
INSERT INTO T1 DEFAULT VALUES;
GO 3 -- выполним предыдущий пакет (т.е. вставку) 3 раза
SELECT * FROM t1;
INSERT INTO t2(t1_id) VALUES(1),(2); 
SELECT * FROM t2;
id t1_id
1 1
2 2

Стандартное каскадное удаление

DROP TABLE t1 CASCADE;

работать не будет, т.к. оно еще не реализовано в SQL Server (но работает, например, в PostgreSQL), тогда как оператор

DROP TABLE t1;

вызовет следующую ошибку:
Невозможно удалить объект «t1», так как на него ссылается ограничение FOREIGN KEY.
Мы можем удалить связанные таблицы одним оператором, перечислив их через запятую (сначала подчиненную таблицу, а затем — главную):

DROP TABLE t2,t1;

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

DROP TABLE IF EXISTS t2,t1;

Заметим, что оператор DROP . IF EXISTS может применяться и к другим объектам базы данных, например, представлениям и хранимым процедурам.
Возможно, что в следующих версиях SQL Server может появиться и оператор типа:

CREATE TABLE IF NOT EXISTS.

который будет создавать таблицу только в том случае, если такой не существует.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Автор не разрешил комментировать эту запись

SQL оператор DROP TABLE

В этом учебном материале вы узнаете, как использовать SQL оператор DROP TABLE с синтаксисом и примерами.

Описание

SQL оператор DROP TABLE позволяет вам удалить таблицу из базы данных SQL.

Синтаксис

Синтаксис для оператора DROP TABLE в SQL.

DROP TABLE table_name;

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

table_name Имя таблицы для удаления из базы данных

Пример

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

DROP TABLE suppliers;

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *