Краткое сравнение Oracle SQL и ANSI SQL - Оператор UPDATE

ОГЛАВЛЕНИЕ

 

Оператор UPDATE

Оператор UPDATE в Oracle полностью соответствует требованиям начального уровня ANSI SQL. Однако имеются некоторые дополнительные возможности. Если отбросить возможности предназначенные для работы с объектными таблицами вот они:

  1. использование табличных алиасов для ссылок на обновляемую таблицу в подзапросах
  2. подзапросы в правой части предложения SET в отличие от только выражений в ANSI SQL
  3. список обновляемых колонок в левой части предложения SET, в отличии от одной колонки в ANSI SQL
  4. подзапросы в предложении SET или WHERE могут ссылаться на обновляемую таблицу
  5. Оператор UPDATE поддерживает обновление подзапросов

Проиллюстрируем эти возможности на примере:

1  UPDATE emp aaa 
2 SET deptno =(SELECT deptno FROM dept WHERE loc='Москва'),
3 SET (sal,comm)=(SELECT 1.1*AVG(sal),1.5*AVG(comm)
4 FROM emp bbb WHERE aaa.deptno=bbb.deptno)
  • 1. таблице emp присваивается алиас aaa для последующей ссылки на обновляемую таблицу в подзапросе
  • 2. значение столбца deptno берется из подзапроса, возвращающего одно значение
  • 3. значение столбцов sal и col ,берется из подзапроса, возвращающего два значения
  • 4. делается выборка из таблицы emp, которая обновляется этим же оператором
5 UPDATE emp SET comm=NULL WHERE job='управляющий'

этот запрос будет аналогичен следующему запросу:

UPDATE (SELECT * FROM emp )SET comm=NULL WHERE job='управляющий'
  • 5. в данном примере Oracle будет обновлять временное представление SELECT * FROM emp. После предложения UPDATE в круглых скобках может следовать любой оператор SELECT. На основе этого оператора строится временное представление. Если это представление удовлетворяет условиям на обновляемые представления Oracle выполнит запрос.