Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_БД.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆
    1. Обновление представлений

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

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

UPDATE CustomerTable1

SET Email = 'NewEmailAddress@somewhere.com'

WHERE CustomerID = 1000;

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

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

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

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

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

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

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

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

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

  1. ТРИГГЕРЫ. ТИПЫ ТРИГГЕРОВ. ПРИМЕНЕНИЕ.

  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.

Способ, при помощи которого это делается, зависит от конкретной СУБД. Пока что предположим, что для получения новых значений необходимо добавить к имени столбца префикс :new.. Так, например, при вставке в таблицу CUSTOMER переменная :new.Name содержит значение столбца Name вставляемой строки. В случае обновления переменная .new.Name содержит значение, которое будет иметь столбец Name после выполнения запроса. Аналогичным образом, будем считать, что для получения старых значений необходимо добавить к имени интересующего нас столбца префикс :old.. Например, при удалении переменная :old.Name содержит значение столбца Name удаляемой строки. В случае обнов­ления эта переменная содержит значение столбца Name до выполнения запроса. На самом деле именно такая стратегия используется Oracle.

Применение триггеров:

1. проверка допустимости вводимых данных, 2. присваивание значений по умолчанию,

3. обновление представлений, 4. обеспечение ссылочной целостности.

  1. ХРАНИМЫЕ ПРОЦЕДУРЫ. ПРЕИМУЩЕСТВА ИСПОЛЬЗОВАНИЯ ХРАНИМЫХ ПРОЦЕДУР.

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