Позиционная корректировка записи (UPDATE OF CURSOR)

Функция

Определение оператора позиционной корректировки записи таблицы.

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

   
<​позиционная корректировка​>::=
<​значение корректировки​>::=

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

  1. <​RAL​>, <​WAL​> – уровни доступа на чтение и запись (см. документ «Администрирование комплекса средств защиты данных», раздел «Уровни доступа»).

    Примечание

    Поддерживается только в СУБД ЛИНТЕР БАСТИОН.

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

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

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

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

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

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

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

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

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

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

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

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

  5. Одно и то же <​имя столбца​> не должно появляться в <​значении корректировки​> более одного раза.

  6. Областью видимости <​имени таблицы​> является весь оператор <​позиционной корректировки​>.

  7. Если <​значимое выражение​> содержит столбец из <​имени таблицы​>, то это ссылка на значение данного столбца в изменяемой строке перед тем, как любое значение этой строки будет изменено.

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

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

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

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

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

Примеры

  1. select * from auto where make='LAMBORGHINI';
    update auto set CHKMILE = CHKMILE + 10 where current of cursor;
                
  2. create or replace procedure proc1 () result int
    code
      execute direct "select * from auto;";//
      execute "update auto set year = year + 1 where current of cursor;";//
      return errcode();//
    exceptions
      when all then resignal;//
    end;
  3. create or replace procedure proc2 () result int
    declare
      var cur1 typeof(auto);//
    code
      open cur1 as "cursor_cur1" for direct "select * from auto;";//
      execute "update auto set year = year + 1 where current of  \"cursor_cur1\";";//
      return errcode();//
    exceptions
      when all then resignal;//
    end;