Команда update

Изменяет существующие значения в таблице или в основной таблице представления. При этом включается любой 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);

В начало


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: