CREATE VIEW
Описание
CREATE VIEW описывает вид данных основанный на одной или более основной таблицы в базе данных. Возвращаемые строки определены инструкцией SELECT, который перечисляет столбцы исходных таблиц. Только определение вида существует в базе данных; вид непосредственно не представляет, из себя, сохраненные данные. Это позволяет выполнять операции выбора, project, join и union над видами, как если бы они были таблицами.
Пользователь, который создает вид - его владелец, и имеет все привилегии для этого, включая возможность предоставлять (GRANT) привилегии другим пользователям, триггерам и сохраненным процедурам. Пользователь может иметь привилегии к виду, без необходимости иметь доступ к таблицам, на которых вид основан. При создании видов:
- Вид только для чтения требует SELECT привилегиями на основные таблицы.
- Модифицируемый вид требует ALL привилегий на основные таблицы.
Опция view_col гарантирует, что вид всегда содержит те же самые столбцы и, что столбцы имеют те же самые, определенные видом, имена. Имена столбцов вида соответствуют порядку и количеству столбцов перечисленных в <select>, по этому определите все столбцы вида или ни одного.
Определение view_col может содержать один или более столбцов основанных на выражении, которое комбинирует результаты двух столбцов. Выражение должно возвращать одиночное значение и не должно возвращать массив или массив элементов. Если вид включает выражение view_col опция обязательна.
Обратите внимание: Любые столбцы, используемые в значении выражения, должны присутствовать раньше чем выражение может быть определено.
Предложение инструкции SELECT не должно включать предложение ORDER BY.
WITH CHECK OPTION позволяет InterBase проверить, что строка добавлена к или модифицирована в виде... (not understand*). Не используйте WITH CHECK OPTION для видов предназначенных только для вида.
Вид модифицируем если:
- Он подмножество одиночной таблицы или другого модифицируемого вида.
- Все столбцы базовой таблицы исключенные из определения вида допускают значения NULL.
- Инструкция SELECT вида не содержит подзапросов, предикат DISTINCT, предложение HAVING, агрегатных функций, joined таблиц, определенных пользователем функций или сохраненных процедур.
Если определение вида не удовлетворяет этим условиям, он рассматривается, как только для чтения.
Обратите внимание: Виды только для чтения могут быть модифицированы, используя комбинацию определенных пользователем справочных ограничений, триггеров и уникальных индексов.
Синтаксис
CREATE VIEW name [(view_col [, view_col ...])] AS <select> [WITH CHECK OPTION];
Аргумент | Описание |
---|---|
name |
Имя для вида. Должно быть уникальным среди всех имен видов, таблиц и процедур в базе данных. |
view_col |
Имена столбцов вида. Имена столбцов должны быть уникальны среди всех имен столбцов в виде. Требуется, если вид содержит столбцы, основанные на выражении; иначе факультативен. По умолчанию, имена столбцов берутся из базовой таблицы. |
<select> |
Определяет кретерии выбора строк, чтобы включить в вид. |
WITH CHECK OPTION |
Предотвращает операции INSERT или UPDATE на модифицируемом виде, если INSERT или UPDATE нарушает условия поиска определенные в предложении WHERE в <select>. |
Примеры
Следующая инструкция создает модифицируемый вид:
CREATE VIEW SNOW_LINE (CITY, STATE, SNOW_ALTITUDE) AS SELECT CITY, STATE, ALTITUDE FROM CITIES WHERE ALTITUDE > 5000;
Следующая инструкция использует вложенные запросы для создания вида:
CREATE VIEW RECENT_CITIES AS SELECT STATE, CITY, POPULATION FROM CITIES WHERE STATE IN (SELECT STATE FROM STATES WHERE STATEHOOD > "1-JAN-1850");
В модифицируемом виде, WITH CHECK OPTION предотвращает любые вставки или модификации через вид, которые не удовлетворяют предложению WHERE в инструкции CREATE VIEW SELECT:
CREATE VIEW HALF_MILE_CITIES AS SELECT CITY, STATE, ALTITUDE FROM CITIES WHERE ALTITUDE > 2500 WITH CHECK OPTION;
Предложение WITH CHECK OPTION в предыдущем виде, предотвратило бы следующую вставку:
INSERT INTO HALF_MILE_CITIES (CITY, STATE, ALTITUDE) VALUES ("Chicago", "Illinois", 250);
С другой стороны, следующий UPDATE был бы разрешен:
INSERT INTO HALF_MILE_CITIES (CITY, STATE, ALTITUDE) VALUES ("Truckee", "California", 2736);
Предложение WITH CHECK OPTION не допускают модификаций через вид, которые изменяют значения строки, так что вид не сможет отыскать их:
UPDATE HALF_MILE_CITIES SET ALTITUDE = 2000 WHERE STATE = "NY";
Следующая инструкция создает вид, который joins две таблицы и по этому только для чтения:
CREATE VIEW PHONE_LIST AS SELECT EMP_NO, FIRST_NAME, LAST_NAME, PHONE_EXT, LOCATION, PHONE_NO FROM EMPLOYEE, DEPARTMENT WHERE EMPLOYEE.DEPT_NO = DEPARTMENT.DEPT_NO;