Изменяет существующие значения в таблице или в основной таблице представления. При этом включается любой UPDATE-триггер, определенный на таблице.
Условия:
Для того, чтобы пользователь мог изменять значения в таблице, эта таблица должна быть в его схеме, или пользователь должен иметь привилегию UPDATE по этой таблице. Для того, чтобы пользователи могли изменять значения в базовой таблице представления, владелец схемы, содержащей представление, должен иметь привилегию UPDATE по этой базовой таблице. Кроме того, если представление находится не в пользовательской схеме, ему должна быть назначена привилегия UPDATE по этому представлению. Системная привилегия UPDATE ANY TABLE также позволяет обновлять значения в любой таблице или базовой таблице любого представления.
Синтаксис:
Ключевые слова и параметры:
schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
table view — имя таблицы, в которой изменяются данные; если определяется представление, данные изменяются в основной таблице представления
subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
сolumn — столбец таблицы или представления, значение которого изменяется; если столбец таблицы из предложения SET опускается, значение столбца остается неизменяемым
expr — новое значение, назначаемое соответствующему столбцу; это выражение может содержать главные переменные и необязательные индикаторные переменные
subquery_2 — новое значение, назначаемое соответствующему столбцу
subquery_3 — новое значение, назначаемое соответствующему столбцу
WHERE — определяет диапазон изменяемых строк теми, для которых определенное условие является TRUE; если опускается эта фраза, модифицируются все строки в таблице или представлении
Если предложение SET содержит подзапрос, он возвращает точно одну строку для каждой модифицируемой строки. Каждое значение в результате подзапроса назначается соответствующим столбцам списка в круглых скобках. Если подзапрос не возвращает никакие строки, столбцу назначается NULL. Подзапросы могут выбирать данные из модифицируемой таблицы. Предложение SET может совмещать выражения и подзапросы.
Пример 1. Изменение для всех студентов стипендии на значение, равное 300:
UPDATE student SET stip = 300;
Пример 2. Замена значения столбца во всех строках таблицы, как правило, используется редко.
Поэтому в команде UPDATE, как и в команде DELETE, можно использовать предикат.
Для выполнения указанной замены значений столбца stip, для всех студентов, у которых балл больше 90, следует ввести:
UPDATE student SET stip = 300 WHERE ball > 90;
Пример 3. В предложении SET можно указать любое количество значений для столбцов, разделенных запятыми:
UPDATE student SET im = 'Алексей', stip = stip + 50, ball = 95 WHERE fam = 'Соколов';
Пример 4. В предложении SET можно указать значение NULL без использования какого-либо специального синтаксиса (например, такого как IS NULL). Таким образом, если нужно установить всем студентам стипендию, равную NULL-значению, необходимо ввести:
UPDATE student SET stip = NULL;
Пример 5. Устанавливаем студентам, имеющим балл более 90, размер стипендии, равный максимальному ее размеру:
UPDATE student a SET stip = (SELECT MAX(stip) FROM student b) WHERE ball > 90;
Пример 6. При вводе данных студентов в таблицу student двум студентам с кодами 100 и 128 им были ошибочно присвоены данные друг друга.
Ситуация осложняется тем, что у нас нет доступа к другим полям таблицы за исключением поля KOD_STUD, являющегося первичным ключом.
Исправить данную ошибку можно одной командой UPDATE, используя функцию DECODE().
DECODE (val, exp1, exp2, exp3, exp4, …, def) – сначала оценивает значение или выражение val, а затем сравнивает выражение exp1 с val.
Если val = exp1, возвращается выражение exp2. Если val не равно exp1, оценивается выражение exp3 и возвращается выражение exp4, если val=exp3.
Процесс продолжается, пока все выражения не будут оценены. Если не будут найдены соответствия, возвращается значение по умолчанию def.
UPDATE student SET kod_stud = DECODE(kod_stud,100,128,128,100);
В начало