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

Оценить
(0 голоса)

Представление может быть использовано с оператором insert, как если бы оно было обычной базовой таблицей. Когда представление используется для добавления строк, строки фактически добавляются в соответствующую базовую таблицу.

 

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

 

Представление vdept, которое было создано в примере 11.10, содержит первые два столбца таблицы department. Последующий оператор insert добавляет строку в таблицу, связанную с представлением, используя значения 'd4' и 'Development'. Столбцу location, который не описан в представлении v_dept, присваивается значение null.

При использовании представления обычно допустимо добавлять в представление новую строку, которая не удовлетворяет условиям в предложении where запроса в представлении. Опция with check option используется для ограничения добавления только тех строк, которые удовлетворяют условиям в запросе. Если используется эта опция, Database Engine проверяет каждую добавляемую строку, чтобы убедиться, что условия в предложении where возвращают значение «истина». Если же эта опция опущена, то не выполняются никакие проверки соответствия условиям в предложении where, поэтому любая строка будет добавлена в исходную таблицу. Это может приводить к запутанной ситуации, когда строка с использованием представления добавлена в таблицу, но впоследствии она не может быть найдена при помощи оператора select представления, потому что предложение where ограничивает возвращаемые select строки. Опция with check option также применяется и в операторе update.

В примерах 11.11 и 11.12 показана разница применения и не использования опции with check option, соответственно.

 

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

 

В примере 11.1 система проверяет, дает ли добавляемое в столбец enter_date значение «истина» при вычислении условия в предложении where оператора select. Эта попытка при добавлении в следующем операторе новой строки завершится неудачно, потому что добавляемая строка не соответствует условию.

 

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

 

Поскольку в примере 11.12 не используется опция with check option, оператор insert будет выполнен и строка будет добавлена в основную таблицу workson. Заметьте, что последующий оператор select не отображает добавленную строку, потому что она не может быть найдена с использованием представления v_2006_nocheck.

Добавление строк в таблицы, лежащие в основе представления, нельзя выполнить, если соответствующее представление содержит любую из следующих возможностей:

♦ предложение from в определении представления включает две или более таблиц, и список столбцов содержит столбцы более чем из одной таблицы;

♦ столбец в представлении наследуется из агрегатной функции;

♦ оператор select в представлении содержит предложение group by или опцию distinct;

♦ столбец в представлении наследуется от константы или выражения.

В примере 11.13 показано представление, которое не может быть использовано для добавления строк в базовую таблицу, лежащую в основе представления.

 

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

 

В примере 11.13 создается представление vsum, которое в операторе select содержит агрегатную функцию. Поскольку представление в примере возвращает результат агрегирования многих строк (а не одной строки из таблицы project), то нет оснований пытаться добавлять строку в таблицу, лежащую в основе этого представления, используя это представление.


Оператор UPDATE и представление
Оператор DELETE и представление
Индексированные представления
Создание индексированного представления
Изменение структуры индексированного представления

Добавить комментарий


Защитный код
Обновить

© 2018 www.serversql.ru. Все права защищены.