Позиционная корректировка записи
Функция
Определение оператора позиционной корректировки записи таблицы.
Спецификация
::=
[#[группа]#[RAL]#[WAL]] [[AS] псевдоним таблицы]
SET значение корректировки[, …]
WHERE CURRENT OF {CURSOR | имя курсора}
[WAIT | NOWAIT]
[{QUANT | QUANTUM} TIMEOUT время] [WITH PRIORITY приоритет]
::=
{ значимое выражение
| подзапрос
| NULL
| DEFAULT
| EXTFILE(NULL | ? |спецификация файла[, имя фильтра])}
Синтаксические правила
-
< RAL >
,< WAL >
– уровни доступа на чтение и запись (см. документ «Администрирование комплекса средств защиты данных», раздел «Уровни доступа»).Примечание
Поддерживается только в СУБД ЛИНТЕР БАСТИОН.
-
Допустимые привилегии для
< имени таблицы >
должны включатьUPDATE
. -
< Имя таблицы >
должно быть таблицей, указанной в первой< FROM-спецификации >
текущего< запроса выборки >
. -
Результат
< запроса выборки >
и таблица< имя таблицы >
должны быть обновляемыми.
Общие правила
-
Запрос
< позиционной корректировки >
должен подаваться после выполнения (по тому же каналу)< запроса выборки >
, т.е. с помощью этого оператора можно изменить в таблице ту или иную запись, вошедшую в ответ данного< запроса выборки >
. -
Общая схема выполнения позиционного удаления:
-
открыть курсор;
-
сделать выборку (SELECT-запрос) из таблицы или обновляемого представления;
-
переместиться по выборке в нужную строку (например, в интерактивной программе в ту строку, которую пользователь желает удалить), т.е. установить текущую строку ответа;
-
выполнить конструкцию
< позиционная корректировка >
.
-
-
При выполнении
< позиционной корректировки >
корректируется запись, являющаяся текущей строкой ответа< запроса выборки >
. -
< Значимое выражение >
в< позиционной корректировке >
не должно включать агрегатных функций. -
Одно и то же
< имя столбца >
не должно появляться в< значении корректировки >
более одного раза. -
Областью видимости
< имени таблицы >
является весь оператор< позиционной корректировки >
. -
Если
< значимое выражение >
содержит столбец из< имени таблицы >
, то это ссылка на значение данного столбца в изменяемой строке перед тем, как любое значение этой строки будет изменено. -
Параметр
< время >
задает максимально допустимую продолжительность выполнения запроса (от 1 до 65535 сек.). Если запрос в отведенное для него время не был выполнен, его обработка прекращается с выдачей соответствующего кода завершения. -
Конструкция
WITH PRIORITY < приоритет >
устанавливает заданный приоритет (значение в диапазоне от 0 до 255) выполняемому запросу. Если задать приоритет больше текущего приоритета пользователя, от имени которого подается запрос, то выдается код завершения 1022 («Нарушение привилегий»). -
Конструкция
WITH PRIORITY < приоритет >
назначает приоритет только тому запросу, в котором она указана. На приоритет любых последующих запросов она не влияет. -
Для таблицы, созданной с атрибутом
NODE
,< позиционная корректировка >
с локального сервера недоступна. -
Для таблиц «в памяти»
< позиционная корректировка >
в режиме OPTIMISTIC не поддерживается.
Примеры
-
select * from auto where make='LAMBORGHINI'; update auto set CHKMILE = CHKMILE + 10 where current of cursor;
-
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;
-
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;