Ответ 1
Представления в Oracle могут быть обновляемыми при определенных условиях. Это может быть сложно, и обычно это нецелесообразно.
Заметки об обновляемых представлениях
Обновляемое представление - это то, которое вы можете использовать для вставки, обновления или удаления строк базовой таблицы. Вы можете создать представление, которое может быть обновлено по своей сути, или вы можете создать триггер INSTEAD OF на любом представлении, чтобы сделать его обновляемым.
Чтобы узнать, можно ли изменить столбцы изменчивого представления, запросите просмотр словаря USER_UPDATABLE_COLUMNS. Информация, отображаемая в этом представлении, имеет смысл только для неотъемлемо обновляемых представлений. Чтобы представление было по своей сути обновляемым, должны быть выполнены следующие условия:
- Каждый столбец в представлении должен отображать столбец одной таблицы. Например, если столбец представления сопоставляется с выводом предложения TABLE (неназванной коллекции), то представление не является по своей сути обновляемым.
- В представлении не должно быть ни одной из следующих конструкций:
- Оператор набора
- оператор DISTINCT
- Агрегатная или аналитическая функция
- ГРУППА BY, ORDER BY, MODEL, CONNECT BY или START WITH clause
- Выражение коллекции в списке SELECT
- Подзапрос в списке SELECT
- Подзапрос, обозначенный WITH READ ONLY
- Объединение, за некоторыми исключениями, как описано в Руководстве администратора базы данных Oracle
Кроме того, если внутренне обновляемое представление содержит псевдокоманды или выражения, вы не можете обновлять строки базовых таблиц с помощью инструкции UPDATE, которая ссылается на любую из этих псевдокоманд или выражений.
Если вы хотите, чтобы просмотр соединения был обновляемым, все условия должны быть истинными:
- Оператор DML должен влиять только на одну таблицу, лежащую в основе соединения.
- Для оператора INSERT представление не должно создаваться WITH CHECK OPTION, и все столбцы, в которые вставлены значения, должны поступать из таблицы с сохранением ключа. Таблица с сохранением ключа - это та, для которой каждый первичный ключ или уникальное значение ключа в базовой таблице также уникально в представлении соединения.
- Для оператора UPDATE все обновленные столбцы должны быть извлечены из таблицы с сохранением ключа. Если представление было создано WITH CHECK OPTION, то объединение столбцов и столбцов, взятых из таблиц, которые упоминаются более одного раза в представлении, должно быть экранировано из UPDATE.
- Для оператора DELETE, если соединение приводит к более чем одной сохраненной ключам, то Oracle Database удаляет из первой таблицы, указанной в предложении FROM, независимо от того, было ли создано представление WITH CHECK OPTION.