Шаг 47 - PL/SQL - DML, оператор DELETE

Наполнять таблицу данными задача для нас не такая сложная. А вот теперь, если какие-либо данные нужно, скажем, удалить из таблицы? Вопрос достаточно тривиален. Для этого в языке DML - есть оператор DELETE. Вот так выглядит его синтаксис:

	
---------------- DELETE FROM --- таблица --- * псевдоним * ---------------------------------
-------------------------------- (имя столбца таблицы) -------------------------------------
----------------- WHERE -------- условие ---------------------------------------------------

Как мы видим в операторе DELETE так же есть часть определения условия WHERE. То есть все, что мы использовали ранее для описания работы WHERE в операторе SELECT, применимо и здесь. Допустим нам нужно удалить запись с номером три. Записываем:

DELETE FROM PEOPLE
	WHERE ID = 3
/

COMMIT
/

Получаем:

SQL> DELETE FROM PEOPLE
  2   WHERE ID = 3
  3  /

1 строка удалена.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

Оператор DML - DELETE как видим совершенно безукоризненно выполнил свою работу. Теперь давайте удалим все из таблицы PEOPLE. Записываем:

DELETE FROM PEOPLE
/

COMMIT
/

Получаем:

SQL> DELETE FROM PEOPLE
  2  /

5 строк удалено.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

Теперь из таблицы PEOPLE удалены все записи, которые мы вводили ранее. Да! Давайте еще раз вернемся к NULL для того, чтобы посмотреть как он ведет себя здесь. Введем уже знакомым нам с вам способом, три записи в таблицу PEOPLE со значениями NULL:

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(1, NULL, 'Godwin', 'Petrovich')
/

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(2, 'Bob', NULL, 'Martovich')
/

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(3, 'Frank', 'Black', NULL)
/

COMMIT
/

Получаем:

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(1, NULL, 'Godwin', 'Petrovich')
  3  /

1 строка создана.

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(2, 'Bob', NULL, 'Martovich')
  3  /

1 строка создана.

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(3, 'Frank', 'Black', NULL)
  3  /

1 строка создана.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

Теперь в таблице PEOLPLE в трех разных записях присутствует значение NULL. Допустим вы хотите удалить записи со значением NULL в поле NM таблицы PEOPLE. Тогда записываем:

DELETE FROM PEOPLE
	WHERE NM IS NULL
/

COMMIT
/

Получаем:

SQL> DELETE FROM PEOPLE
  2   WHERE NM IS NULL
  3  /

1 строка удалена.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

Запись такого типа одна и она удалена оператором DELETE. Для закрепления пройденного давайте проделаем следующее. Очистим таблицу OLD_PEOPLE и заполним ее остатками записей в таблице PEOPLE. Записываем:

DELETE FROM OLD_PEOPLE
/

COMMIT
/

Получаем:

SQL> DELETE FROM OLD_PEOPLE
  2  /

6 строк удалено.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

Таблица OLD_PEOPLE очищена и пуста. Вводим далее такое выражение:

INSERT INTO OLD_PEOPLE
	SELECT * FROM PEOPLE	
/

COMMIT
/

Получаем:

SQL> INSERT INTO OLD_PEOPLE
  2   SELECT * FROM PEOPLE
  3  /

2 строк создано.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

Вот таким образом в обоих наших тренировочных табличках на текущий момент по две одинаковых записи. Вот так достаточно просто работает оператор DELETE. Можете попробовать еще раз все с самого начала для закрепления! :)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 21.10.2003