Оператор update изменяет указанные записи в таблице.
Формат:
update Имя_таблицы [ from Список_используемых_таблиц ] set Список_изменений [ where Условие_отбора ];
Аргументы:
Аргумент
Значение
Имя_таблицы
Определяет таблицу, в которой модифицируются записи.
Список_используемых_таблиц
Задает таблицы, из которых выбирается информация. Если используется соединение нескольких таблиц, то их имена перечисляются через запятую. Таблица, записи в которой модифицируются, в конструкции from не указывается.
Список_изменений
Определяет поля, которые меняются, и их новые значения. Одно изменение отделяется от другого изменения запятой.
Условие_отбора
Определяет, какие именно записи модифицируются. Если условие опущено, то модифицируются все записи.
Изменение записывается в виде:
Имя_поля = Новое_значение
Новое_значение представляет собой константу (число, строку, дату), поле, переменную или арифметическое выражение. В качестве значения поля будет использоваться то значение, которое было до модификации записи.
Пример работы с оператором update
Приведем пример работы оператора. Пусть стоит задача обновить имена пользователей в таблице READER из таблицы TEMP, созданной и наполненной данными следующим скриптом:
insert into TEMP (FNAME, LNAME) values ('Иван', 'Правдин');
insert into TEMP (FNAME, LNAME) values ('Петр', 'Перов');
В этом случае для обновления данных необходимо выполнить следующий оператор:
update READER r from TEMP t set r.FNAME = t.FNAME where r.LNAME = t.LNAME;
fix all;
select FNAME, LNAME from READER;
Типичной ошибкой при обновлении одной таблицы по значениям в другой является неоднозначность операции. В нашем случае, если записей с одинаковыми фамилиями в таблице TEMP было бы несколько, то возникла бы ошибка: [-118] «Неоднозначность при выполнении операции join-update».