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

Как было отмечено, одной из операций над представлениями является их непосредственное использование с запросами модификации DML: INSERT, UPDATE и DELETE. Такие представления называются модифицируемыми (или обновляемыми). Представление можно обновлять, если определяющий его запрос соответствует следующим требованиям:

-       должен отсутствовать оператор DISTINCT; т.е. повторяющиеся строки не должны исключаться из таблицы результатов запроса;

-       в предложении FROM должна быть задана только одна таблица, которую можно обновлять; т.е. у представления должна быть одна исходная таблица, а пользователь должен иметь соответствующие права доступа к ней. Если исходная таблица сама является представлением, то оно также должно удовлетворять этим условиям;

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

-       предложение WHERE не должно содержать вложенный запрос; т.е. в нем могут присутствовать только простые условия поиска;

-   в запросе не должно содержаться предложение GROUPBY или HAVING. Эти требования базируются на том принципе, что представление разрешается

обновлять в том случае, если СУБД может для каждой строки представления найти исходную строку в исходной таблице, а для каждого обновляемого столбца представления – исходный столбец в исходной таблице. Если представление соответствует этим требованиям, то над ним и, как следствие, над исходной таблицей можно выполнять имеющие смысл операции вставки, удаления и обновления. Например, следующие представления являются представлениями только для чтения:

/* Представление Dailyrequest только для чтения из-за наличия DISTINCT в запросе */

предыдущаяследующая