Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db-shpora.doc
Скачиваний:
14
Добавлен:
08.11.2018
Размер:
1.44 Mб
Скачать

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

В зависимости от способа определения, представления могут быть обновляемыми или необновляемыми.

Листинг 35. Синтаксис обновления

UPDATE CustomerTable1

SET Email = 'NewEmailAddress@somewhere.com'

WHERE CustomerID = 1000;

Вообще говоря, чтобы обновить представление, СУБД должна иметь возможность связать строки представления, предназначенные к обновлению, с конкретными строками конкретной таблицы.

Обновляемые представления:

  • основанные на одной таблице, в которой нет вычисляемых столбцов, а все непустые столбцы присутствуют в представлении;

  • основанные на любом количестве таблиц, с возможным наличием вычисляемых столбцов – в случае, если для представления определен замещающий триггер.

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

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

  • основанные на нескольких таблицах; обновление может быть разрешено для самой нижней таблицы в иерархии подчинения, если строки этой таблицы могут быть уникальным образом идентифицированы.

Если в представлении отсутствуют какие-либо обязательные (NOT NULL) столбцы, добавление новых данных через это представление невозможно. Его, однако, можно использовать для обновления и удаления данных, если представление содержит первичный ключ (или ключ-кандидат, как в некоторых СУБД). Многотабличные представления могут быть обновляемыми по самой подчиненной таблице, если первичный ключ или ключ-кандидат этой таблицы присутствует в представлении.

Все представления, для которых определен замещающий триггер (триггер INSTEAD OF), считаются обновляемыми. Когда СУБД получает запрос на обновление такого представления, она вызывает замещающий триггер.

  1. Триггеры. Типы триггеров. Применение.

Триггер (trigger) – это специальная программа, назначаемая таблице или представлению. Триггер вызывается СУБД, когда пользователь запрашивает вставку, обновление или удаление строки из таблицы или представления, которому принадлежит данный триггер.

Триггеры для Oracle можно писать на собственном языке программирования этой СУБД, носящем название PL/SQL (Programming Language for SQL — язык программирования для SQL), или на Java. Триггеры для SQL Server пишутся на собственном языке этой СУБД, который называется T-SQL (Transaction SQL, транзакционный SQL).

Oracle поддерживает три вида триггеров: предваряющие (BEFORE), замещающие (INSTEAD OF) и завершающие (AFTER). Предваряющие триггеры вызываются перед обработкой запроса на вставку, обновление или удаление, замещающие — вместо него, а завершающие — после обработки запроса. Всего имеется девять возможных типов триггеров: предваряющий триггер вставки, обновления и удаления, замещающий триггер вставки, обновления и удаления и завершающий триггер вставки, обновления и удаления.

SQL Server поддерживает только замещающие и завершающие триггеры, поэтому для данной СУБД имеется только шесть возможных типов триггеров.

В других СУБД поддержка триггеров также имеет разный уровень.

При запуске триггера СУБД предоставляет доступ к вставляемым, обновляемым или удаляемым из тела триггера данным.

В случае вставки триггеру доступны значения столбцов новой строки,в случае удаления – значения столбцов удаляемой строки,в случае обновления – триггер может оперировать как новыми, так и старыми значениями.

Для триггеров вставки и обновления в SQL Server новые значения столбца обрабатываемой таблицы храниться в псевдотаблице под названием inserted. В случае обновления и удаления старые значения каждого столбца будут хранится в псевдотаблице с именем deleted.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]