Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция DELETE советы и хитрости Oracle

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

DELETE [FROM]

{имя_таблицы | ONLY {имя_таблицы)} [псевдоним] [{PARTITION {имя_раздела) SUBPARTITION

(имя_подраздела)}] | {подзапрос [WITH {READ ONLY |

CHECK OPTION [CONSTRAINT имя ограничения]}]) | TABLE {выражение_для_коллекции) [(+)]}

[WHERE условие_поиска] [RETURNING выражение [, …] INTO переменная [, …]]

Параметры приведены ниже.

имя_таблицы [псевдоним]

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

PARTITION имя раздела

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

SUBPARTITION (имя_подраздела)

Удаление применяется к указанному подразделу, а не ко всей таблице.

(подзапрос [WITH (READ ONLY CHECK OPTION [CONSTRAINT имя_ограничения]}])

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

подзапрос

Указывается инструкция SELECT, которая представляет собой подзапрос. Можно создавать любой стандартный подзапрос, но он не может содержать предложения ORDER BY.

WITH READ ONLY

Указывается, что подзапрос не может быть обновлен.

WITH CHECK OPTION

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

CONSTRAINT имя_ограничения

Система Oracle ограничит вносимые изменения, основываясь на ограничении с именем имя_ограничения.

TABLE (выражение Для роллекции) [(+)]

Система Oracle будет обрабатывать выражеиие_дляроллекции как таблицу, хотя фактически это может быть подзапрос, функция или другой конструктор коллекции. В любом случае значение, возвращаемое выражением Для роллекции, должно представлять собой вложенную таблицу или VARRAY.

RETURNING выражение

Извлекаются строки, затронутые командой там, где команда DELETE обычно возвращает только количество удаленных строк. Предложение RETURNING можно применять, если целью команды является таблица, материализованное представление или представление по одной базовой таблице. Если предложение используется при удалении одиночной строки, то значения из удаленной строки, которые определяются выражением, сохраняются в переменных PL/SQL и переменных связывания (bind variables). Если предложение используется при удалении многих строк, то значения из удаленных строк, которые определяются выралсени&м, сохраняются в массивах связывания (bind arrays).

INTO переменная

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

При выполнении инструкции DELETE Oracle возвращает освободившееся в таблице (или базовой таблице представления) место обратно в таблицу или индекс, где хранились данные.

Если данные удаляются из представления, представление не может содержать операций над множествами, ключевого слова DISTINCT, соединений, агрегатной функции, аналитической функции, подзапросов SELECT, предложения GROUP BY, предложения ORDER BY, предложения CONNECT BY или START WITH.

Ниже приводится пример, в котором мы удаляем данные с удаленного сервера.

DELETE FROM scott sales@chicago;

В следующем примере

мы удаляем данные из производной таблицы, указанной в выражении для коллекции.

DELETE TABLE(SELECT contactname FROM customers

с WHERE c.customerid=’BOTTM’) s WHERE s. region IS NULL OR s.country=’MEXICO’;

А вот пример удаления из раздела.

DELETE FROM sales PARTITION (sales_q3_1997) WHERE qty > 10000;

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

DELETE FROM employee WHERE job_id=13

AND hire_date + TO_YMINTERVAL(’01-06′) =.< SYSDATE; RETURNING job_lvl INTO :int01;

В предыдущем примере удаляются записи из таблицы employee, а значения j obi vl возвращаются в заранее определенную переменную :intol.

Источник