Представление Oracle с параметрами

Обновлено: 21.11.2024

В этом руководстве по Oracle объясняется, как создавать, обновлять и удалять Oracle VIEWS с синтаксисом и примерами.

Что такое VIEW в Oracle?

В сущности, Oracle VIEW — это виртуальная таблица, которая физически не существует. Скорее, он создается запросом, соединяющим одну или несколько таблиц.

Создать ВИД

Синтаксис

Синтаксис инструкции CREATE VIEW в Oracle/PLSQL:

view_name Имя Oracle VIEW, которое вы хотите создать. ГДЕ условия Необязательный. Условия, которые должны быть выполнены, чтобы записи были включены в ПРЕДСТАВЛЕНИЕ.

Пример

Вот пример использования Oracle CREATE VIEW:

В этом примере Oracle CREATE VIEW создается виртуальная таблица на основе набора результатов инструкции SELECT. Теперь вы можете запросить Oracle VIEW следующим образом:

Обновить ВИД

Вы можете изменить определение Oracle VIEW, не удаляя его, с помощью инструкции Oracle CREATE OR REPLACE VIEW.

Синтаксис

Синтаксис инструкции CREATE OR REPLACE VIEW в Oracle/PLSQL:

view_name Имя Oracle VIEW, которое вы хотите создать или заменить.

Пример

Вот пример использования инструкции Oracle CREATE OR REPLACE VIEW:

В этом примере Oracle CREATE OR REPLACE VIEW будет обновлено определение Oracle VIEW с именем sup_orders без его удаления. Если бы Oracle VIEW еще не существовало, то VIEW было бы просто создано в первый раз.

Отключить ПРОСМОТР

После создания Oracle VIEW его можно удалить с помощью инструкции Oracle DROP VIEW.

Синтаксис

Синтаксис инструкции DROP VIEW в Oracle/PLSQL:

view_name Имя представления, которое вы хотите удалить.

Пример

Вот пример использования инструкции Oracle DROP VIEW:

В этом примере Oracle DROP VIEW удаляется/удаляется Oracle VIEW с именем sup_orders.

Часто задаваемые вопросы

Вопрос. Можно ли обновить данные в Oracle VIEW?

Ответ: VIEW в Oracle создается путем объединения одной или нескольких таблиц. Когда вы обновляете записи в представлении, оно обновляет записи в базовых таблицах, составляющих представление.

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

Вопрос: существует ли Oracle View, если таблица удалена из базы данных?

Ответ: Да, в Oracle VIEW продолжает существовать даже после того, как одна из таблиц (на которой основано Oracle VIEW) удалена из базы данных. Однако если вы попытаетесь запросить Oracle VIEW после того, как таблица была удалена, вы получите сообщение о том, что в Oracle VIEW есть ошибки.

Если вы заново создадите таблицу (таблицу, которую вы удалили), Oracle VIEW снова будет в порядке.

Справочное руководство по MySQL 5.7, включая MySQL NDB Cluster 7.5 и NDB Cluster 7.6

23.5.4 Предложение View WITH CHECK OPTION

Предложение WITH CHECK OPTION может быть задано для обновляемого представления, чтобы предотвратить вставку в строки, для которых условие WHERE в выборе_оператора неверно. Это также предотвращает обновление строк, для которых условие WHERE истинно, но обновление приведет к тому, что оно будет неистинным (другими словами, оно предотвращает обновление видимых строк до невидимых строк).

В предложении WITH CHECK OPTION для обновляемого представления ключевые слова LOCAL и CASCADED определяют объем проверочного тестирования, когда представление определяется в терминах другого представления. Если ключевое слово не указано, по умолчанию используется CASCADED .

До MySQL 5.7.6 тестирование WITH CHECK OPTION работало следующим образом:

С LOCAL проверяется предложение представления WHERE, но никакие базовые представления не проверяются.

С помощью CASCADED проверяется предложение представления WHERE, затем проверяется рекурсия к базовым представлениям, добавляется к ним WITH CASCADED CHECK OPTION (для целей проверки; их определения остаются неизменными) и применяются те же правила.

Без параметра проверки предложение WHERE представления не проверяется, и базовые представления не проверяются.

Начиная с MySQL 5.7.6, тестирование WITH CHECK OPTION соответствует стандарту (с измененной семантикой по сравнению с предыдущей для LOCAL и без проверки):

При использовании LOCAL проверяется предложение представления WHERE, затем проверка рекурсивно обращается к базовым представлениям и применяется те же правила.

С помощью CASCADED проверяется предложение представления WHERE, затем проверяется рекурсия к базовым представлениям, добавляется к ним WITH CASCADED CHECK OPTION (для целей проверки; их определения остаются неизменными) и применяются те же правила.

Без параметра проверки условие представления WHERE не проверяется, а затем выполняется рекурсивная проверка базовых представлений и применяются те же правила.

Рассмотрите определения для следующей таблицы и набора представлений:

Здесь представления v2 и v3 определяются с точки зрения другого представления, v1 . До MySQL 5.7.6, поскольку v2 имеет опцию проверки LOCAL, вставки проверяются только против проверки v2. v3 имеет параметр проверки CASCADED, поэтому вставки проверяются не только против проверки v3, но и против проверок базовых представлений. Следующие утверждения иллюстрируют эти различия:

Вывод: в этом руководстве вы научитесь использовать предложение Oracle WITH CHECK OPTION для обеспечения согласованности представления.

Предложение Oracle WITH CHECK OPTION

Предложение WITH CHECK OPTION используется для обновляемого представления, чтобы запретить изменения представления, которые могут привести к появлению строк, не включенных в определяющий запрос.

Следующий оператор создает представление, в котором строки соответствуют условию предложения WHERE.

Если представление является обновляемым, вы можете обновить строки, чтобы сделать их невидимыми в представлении, или вы можете вставить новые строки, которые сделают условие в предложении WHERE неверным.

Чтобы предотвратить обновление невидимых строк до невидимых, используйте предложение WITH CHECK OPTION:

Пример Oracle WITH CHECK OPTION

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

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

Следующий оператор создает представление audi_cars, которое возвращает только автомобили Audi:

Следующий запрос возвращает данные из представления audi_cars:

Представление audi_cars является обновляемым, поэтому через него можно вставить новую строку в таблицу cars:

Инструкция вставила строку, которая делает условие в предложении WHERE ( brand_id = 1 ) неверным.

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

Это утверждение изменило марку и название автомобиля с идентификатором 3 с Audi на BMW, что сделало строку невидимой в представлении.

Давайте создадим еще одно обновляемое представление с именем ford_cars и предложением WITH CHECK OPTION:

Следующий оператор вставляет автомобиль Audi в таблицу cars через представление ford_cars:

В отличие от представления audi_cars, в этом случае Oracle выдает следующую ошибку:

Поскольку оператор INSERT пытался вставить строку, которая вызывает нарушение представления WITH CHECK OPTION where-clause

Аналогично следующий оператор UPDATE также не обновляется из-за нарушения условия where.

В этом руководстве вы узнали, как использовать предложение Oracle WITH CHECK OPTION в операторе CREATE VIEW для обеспечения согласованности представления.

В этом разделе рассматривается Oracle View, который является важным компонентом базы данных Oracle.

Введение в Oracle View

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

Производная таблица состоит из столбцов имени и кредитного лимита (credit_limit) с множеством строк. Он содержит только частичные данные из таблицы клиентов.

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

Таким образом, по определению представление — это «виртуальная» таблица, данные которой являются результатом сохраненного запроса, который выводится каждый раз, когда вы запрашиваете представление.

Представление — это виртуальная таблица, поскольку вы можете использовать его как таблицу в своих запросах SQL. В каждом представлении есть столбцы с типами данных, поэтому вы можете выполнять запросы к представлениям или управлять их содержимым (с некоторыми ограничениями) с помощью операторов INSERT , UPDATE , DELETE и MERGE .

В отличие от таблицы, представление не хранит никаких данных. Чтобы быть точным, представление ведет себя как таблица. И это просто именованный запрос, хранящийся в базе данных. Когда вы запрашиваете данные из представления, Oracle использует этот сохраненный запрос для извлечения данных из базовых таблиц.

Предположим, мы назначаем запросу выше имя customer_credits и запрашиваем данные из этого представления:

Незаметно Oracle находит сохраненный запрос, связанный с именем customer_credits, и выполняет следующий запрос:

В этом примере таблица клиентов называется базовой таблицей. Кроме того, запрос, определяющий представление, называется определяющим запросом.

Набор результатов, возвращаемый представлением customer_credits, зависит от данных базовой таблицы, которая в данном случае является таблицей клиентов. Представление customer_credits также зависит от структуры таблицы клиентов. Если вы переименуете или удалите один из столбцов, на которые ссылается запрос, например name или credit_limit , представление customer_credits больше не будет работать.

Когда использовать представление Oracle

Вы можете использовать представления во многих случаях для разных целей. Наиболее часто представления используются следующим образом:

  • Упрощение поиска данных.
  • Поддержание логической независимости данных.
  • Реализация безопасности данных.

Упрощение поиска данных

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

Следующий запрос возвращает сумму продаж по клиенту за год:

Этот запрос довольно сложный. Ввод его снова и снова занимает много времени и может привести к ошибке. Чтобы упростить его, вы можете создать представление на основе этого запроса:

Добавив следующее предложение:

перед запросом вы создаете представление customer_sales. Обратите внимание, что в следующем руководстве вы узнаете, как создавать представления.

Теперь вы можете легко получить данные о продажах клиента в 2017 году с помощью более простого запроса:

Поддержание логической независимости данных

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

Например, некоторым системам отчетности могут потребоваться только данные о продажах клиентов для составления стратегических отчетов. Следовательно, вы можете предоставить владельцам приложений представление customer_sales.

Реализация безопасности данных

Представления позволяют реализовать дополнительный уровень безопасности. Они помогают скрыть определенные столбцы и строки из базовых таблиц и предоставлять только необходимые данные соответствующим пользователям.

Oracle предоставляет вам команды GRANT и REVOKE для представлений, чтобы вы могли указать, какие действия пользователь может выполнять с представлением. Обратите внимание, что в этом случае вы не предоставляете никаких привилегий для базовых таблиц, потому что вы можете не захотеть, чтобы пользователь обходил представления и напрямую обращался к базовым таблицам.

Читайте также: