Обновление представлений

На некоторые представления можно писать запросы Update, Delete и Insert, как на обычные таблицы. При выполнении таких запросов реально все изменения вносятся в физические таблицы.

Такие представления называются обновляемыми. Согласно стандарту SQL, обновляемыми являются представления, основанные на запросах:

  1. только по одной таблице
  2. запрос не должен содержать ключевых слов DISTINCT, GROUP BY, HAVING
  3. не должен содержать вложенных запросов
  4. не должен быть комбинированным, т.е. недолжен содержать операций UNION, INTERSECT, EXCEPT (MINUS).

Oracle, дополнительно, не позволяет обновлять запросы с сортировкой результатов.

Таким образом, обновляемых представлений не так и много:

· представления с отбором столбцов (вертикальные представления)

· представления с отбором строк (горизонтальные представления)

· представления с отбором строк и столбцов (смешанные представления).

Например, создадим горизонтальное представление на основе выборки из таблицы оценок marks, содержащее только оценки по Математике.

Предварительно мы выяснили из таблицы предметов subjects, что математика имеет код 1.

Тогда для создания представления потребуется выполнить команду:

Create VIEW mark_1

as

select * FROM marks

WHERE cod_sub=1

Это представление будет обновляемым, поэтому преподаватель математики, которому разрешено обновление этого представления, может изменить любую (одну) оценку, например, таким запросом:

UPDATE mark_1 SET mark=5 WHERE cod_st=123

Однако, запрос:

UPDATE mark_1 SET cod_sub=2 WHERE cod_st=123

который также, как и первый, является разрешенным, приведет к неожиданным последствиям. Обновленная строка окажется за пределами представления mark_1 и запрос:

SELECT * FROM mark_1

эту строку не покажет.

Если такой побочный эффект нежелателен, в команду CREATE VIEW … следует добавить дополнительную фразу WITH CHECK OPTION:

DROP VIEW mark_1

Create VIEW mark_1

as

select * FROM marks WHERE cod_sub=1

WITH CHECK OPTION

Теперь при любой попытке изменить код предмета или добавить предмет с кодом, отличным от единицы, будет выдано сообщение об ошибке.

Если говорить о данном конкретном примере, то можно было бы поступить еще проще: не включать столбец cod_sub в представление, тогда у преподавателя математики просто не будет никакой возможности изменить (нечаянно или преднамеренно) код своего предмета.








Дата добавления: 2015-08-26; просмотров: 576;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.