CREATE VIEW описывает вид данных основанный на одной или более основной таблицы в базе данных. Возвращаемые строки определены инструкцией SELECT, который перечисляет столбцы исходных таблиц. Только определение вида существует в базе данных; вид непосредственно не представляет, из себя, сохраненные данные. Это позволяет выполнять операции выбора, project, join и union над видами, как если бы они были таблицами.
Пользователь, который создает вид - его владелец, и имеет все привилегии для этого, включая возможность предоставлять (GRANT) привилегии другим пользователям, триггерам и сохраненным процедурам. Пользователь может иметь привилегии к виду, без необходимости иметь доступ к таблицам, на которых вид основан. При создании видов:
Опция view_col гарантирует, что вид всегда содержит те же самые столбцы и, что столбцы имеют те же самые, определенные видом, имена. Имена столбцов вида соответствуют порядку и количеству столбцов перечисленных в <select>, по этому определите все столбцы вида или ни одного.
Определение view_col может содержать один или более столбцов основанных на выражении, которое комбинирует результаты двух столбцов. Выражение должно возвращать одиночное значение и не должно возвращать массив или массив элементов. Если вид включает выражение view_col опция обязательна.
Обратите внимание: Любые столбцы, используемые в значении выражения, должны присутствовать раньше чем выражение может быть определено.
Предложение инструкции SELECT не должно включать предложение ORDER BY.
WITH CHECK OPTION позволяет InterBase проверить, что строка добавлена к или модифицирована в виде... (not understand*). Не используйте WITH CHECK OPTION для видов предназначенных только для вида.
Вид модифицируем если:
Если определение вида не удовлетворяет этим условиям, он рассматривается, как только для чтения.
Обратите внимание: Виды только для чтения могут быть модифицированы, используя комбинацию определенных пользователем справочных ограничений, триггеров и уникальных индексов.
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;