Классика баз данных - статьи

       

Оператор UPDATE


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

  • использование табличных алиасов для ссылок на обновляемую таблицу в подзапросах
  • подзапросы в правой части предложения SET в отличие от только выражений в ANSI SQL
  • список обновляемых колонок в левой части предложения SET, в отличии от одной колонки в ANSI SQL
  • подзапросы в предложении SET или WHERE могут ссылаться на обновляемую таблицу
  • Оператор 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 выполнит запрос.



    Содержание раздела