PLAN
Предложение PLAN
позволяет вручную указать план для оптимизатора.
PLAN
в операторе DELETE
DELETE FROM Submissions
WHERE date_entered < '1-Jan-2002'
PLAN (Submissions INDEX ix_subm_date)
PLAN
Предложение PLAN
позволяет вручную указать план для оптимизатора.
PLAN
в операторе DELETE
DELETE FROM Submissions
WHERE date_entered < '1-Jan-2002'
PLAN (Submissions INDEX ix_subm_date)
ORDER BY
и ROWS
Предложение ORDER BY
упорядочивает набор перед его удалением.Что может быть важно в некоторых случаях.
Предложение ROWS
позволяет ограничить количество удаляемых строк.Имеет смысл только в комбинации с предложением ORDER BY
, но допустимо и без него.
В качестве m и n могут выступать любые целочисленные выражения.
При одном аргументе m, удаляются первые m записей.Порядок записей без ORDER BY
не определён (случаен).
Замечания:
Если m больше общего числа записей в наборе, то весь набор удаляется;
Если m = 0, то удаление не происходит;
Если m < 0, то выдаётся сообщение об ошибке.
Если указаны аргументы m и n, удаление ограничено количеством записей от m до n, включительно.Нумерация записей начинается с 1.
Замечания по использованию двух аргументов:
Если m больше общего числа строк в наборе, ни одна строка не удаляется;
Если m > 0 и ⇐ числа строк в наборе, а n вне этих значений, то удаляются строки от m до конца набора;
Если m < 1 или n < 1, выдаётся сообщение об ошибке;
Если n = m – 1, ни одна запись не удаляется;
Если n < m – 1, выдаётся сообщение об ошибке.
ORDER BY
и ROWS
в операторе DELETE
Удаление самой старой покупки
DELETE FROM Purchases ORDER BY ByDate ROWS 1
Удаление заказов для 10 клиентов с самыми большими номерами
DELETE FROM Sales ORDER BY custno DESC ROWS 1 TO 10
Удаляет все записи из sales, поскольку не указано ROWS
DELETE FROM Sales ORDER BY custno DESC
Удаляет одну запись "с конца", т.е.от Z…
DELETE FROM popgroups ORDER BY name DESC ROWS 1
Удаляет пять самых старых групп
DELETE FROM popgroups ORDER BY formed ROWS 5
Сортировка (ORDER BY) не указана, поэтому будут удалены 8 обнаруженных записей, начиная с пятой.
DELETE FROM popgroups ROWS 5 TO 12
SKIP LOCKED
Пропустить заблокированное.
Предложение SKIP LOCKED
заставляет движок пропускать записи, заблокированные другими транзакциями, вместо того,чтобы ждать или вызывать ошибки при конфликте.
Такая функциональность полезна для реализации рабочих очередей, когда один или несколько процессов отправляютданные в таблицу и выдают событие, в то время как рабочие процессы прослушивают эти события и читают/удаляют элементы из таблицы.Используя SKIP LOCKED
, несколько рабочих потоков могут получать эксклюзивные рабочие элементы из таблицы без конфликтов.
Note
|
Если предложение |
См. также: SELECT … SKIP LOCKED
,UPDATE … SKIP LOCKED
.
SKIP LOCKED
для организации очередиПодготовка метаданных.
create table emails_queue (
subject varchar(60) not null,
text blob sub_type text not null
);
set term !;
create trigger emails_queue_ins after insert on emails_queue
as
begin
post_event('EMAILS_QUEUE');
end!
set term ;!
Отправка данных приложением или подпрограммой
insert into emails_queue (subject, text)
values ('E-mail subject', 'E-mail text...');
commit;
Клиентское приложение может прослушивать событие EMAILS_QUEUE
, чтобы отправлять электронные письма, используя этот запрос:
delete from emails_queue
rows 10
skip locked
returning subject, text;
Может быть запущено более одного экземпляра приложения, например, для балансировки нагрузки.
RETURNING
Оператор DELETE
может содержать конструкцию RETURNING
для возвращения значений из удаляемых записей.В RETURNING
могут быть указаны любые столбцы и выражения.Вместо списка столбцов может быть указана звёздочка (*), в этом случае будут возвращены все столбцы удалённой записи.
Note
|
|
RETURNING
в операторе DELETE
DELETE FROM Scholars
WHERE first_name = 'Henry' AND last_name = 'Higgins'
RETURNING last_name, fullname, id
DELETE FROM Dumbbells
ORDER BY iq DESC
ROWS 1
RETURNING last_name, iq
INTO :lname, :iq;
DELETE FRMO TempSales ts
WHERE ts.id = tempid
RETURNING ts.qty
INTO new.qty;