Позиционное удаление записи (DELETE OF CURSOR)

Функция

Определение оператора позиционного удаления записи из таблицы.

Спецификация

   
<​позиционное удаление​>::=
DELETE FROM [имя схемы.]
{имя таблицы |имя представления} [[AS] псевдоним таблицы]
WHERE CURRENT OF {CURSOR | имя курсора} [WAIT | NOWAIT]
[{QUANT | QUANTUM} TIMEOUT время] [WITH PRIORITY приоритет]

Синтаксические правила

  1. Допустимые привилегии для <​имени таблицы​> должны включать привилегию DELETE.

  2. <​Имя таблицы​> должно быть таблицей, указанной в первой <​FROM-спецификации​> текущего <​запроса выборки​>.

  3. Результат <​запроса выборки​> и таблица <​имя таблицы​> должны быть обновляемыми.

Общие правила

  1. Запрос <​позиционного удаления​> должен подаваться после выполнения (по тому же каналу) <​запроса выборки​>, т.е. с помощью этого оператора можно удалить из таблицы ту или иную строку, вошедшую в ответ данного <​запроса выборки​>.

  2. Общая схема выполнения позиционного удаления:

    • открыть курсор;

    • сделать выборку (SELECT-запрос) из таблицы или обновляемого представления;

    • переместиться по выборке в нужную строку (например, в интерактивной программе в ту строку, которую пользователь желает удалить), т.е. установить текущую строку ответа;

    • выполнить конструкцию <​позиционное удаление​>.

  3. При выполнении <​позиционного удаления​> удаляется строка, являющаяся текущей строкой ответа на выполненный <​запрос выборки​>.

  4. Запрос <​позиционного удаления​> может подаваться после выполнения иерархического <​запроса выборки​>.

  5. Запрос <​позиционного удаления​> выполняется по тому каналу, по которому он был подан (а не по каналу, по которому был подан соответствующий SELECT-запрос).

  6. Параметр <​время​> задает максимально допустимую продолжительность выполнения запроса (от 1 до 65535 сек.). Если запрос в отведенное для него время не был выполнен, его обработка прекращается с выдачей соответствующего кода завершения.

  7. Конструкция WITH PRIORITY <​приоритет​> устанавливает заданный приоритет (значение в диапазоне от 0 до 255) выполняемому запросу. Если задать приоритет больше текущего приоритета пользователя, от имени которого подается запрос, то выдается код завершения 1022 («Нарушение привилегий»).

  8. Конструкция WITH PRIORITY <​приоритет​> назначает приоритет только тому запросу, в котором она указана. На приоритет любых последующих запросов она не влияет.

  9. Для таблицы, созданной с атрибутом NODE, <​позиционное удаление​> с локального сервера недоступно.

  10. Для таблиц «в памяти» <​позиционное удаление​> в режиме OPTIMISTIC не поддерживается.