Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по бд.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
4.79 Mб
Скачать

Синтаксис

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;

Обновление данных представления

Данные представления можно обновить при следующих условиях.

• Представление не должно содержать связей. • Представление не должно содержать выражения GROUP BY. • Представление не должно содержать ссылок на псевдостолбец ROWNUM. • Представление не должно содержать итоговых функций. • Не должно использоваться выражение DISTINCT. • В выражении WHERE не должно быть вложенных выражений со ссылками на ту же таблицу, на которую ссылается выражение FROM.

По поводу синтаксиса оператора UPDATE обратитесь к тексту урока 14, "Использование подзапросов".

Добавление строк в представление

В представление можно добавлять строки данных с помощью команды INSERT. При этом действуют те же ограничения, что и в случае обновления данных, о котором шла речь выше. По поводу синтаксиса оператора INSERT обратитесь к тексту урока 14.

Удаление строк из представления

Из представления можно удалять строки данных с помощью команды DELETE. При этом действуют те же ограничения, что и в случае применения команд UPDATE и INSERT. По поводу синтаксиса оператора DELETE обратитесь к тексту урока 14.

Связывание представлений с таблицами и другими представлениями

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

Создание таблицы из представления

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

CREATE TABLE ИМЯ_ТАБЛИЦЫ AS

    SELECT {* | СТОЛБЕЦ1 [, СТОЛБЕЦ2 ]}

    FROM ИМЯ_ПРЕДСТАВЛЕНИЯ

    [ WHERE УСЛОВИЕ1 [, УСЛОВИЕ2 ]]

    [ ORDER BY ]

Создадим представление на основе двух таблиц.

CREATE VIEW ACTIVE_CUSTOMERS AS

       SELECT С.*

       FROM CUSTOMER_TBL С ORDERS_TBL О 

         WHERE C.CUST_ID = O.CUST_ID;

Теперь создадим таблицу на основе только что созданного представления.

CREATE TABLE CUSTOMER_ROSTER_TBL AS 

        SELECT CUST_ID, CUST_NAME 

        FROM ACTIVE_CUSTOMERS;

Наконец, выберем данные новой таблицы точно так же, как любой другой.

SELECT * FROM CUSTOMER_ROSTER_TBL;

CUST_ID        CUST_NAME

                -----------------------------------

        232         LESLIE GLEASON

        12          MARYS GIFT SHOP

        43          SCHYLERS NOVELTIES

        090         WENDY WOLF

        287         GAVINS PLACE

        432         SCOTTYS MARKET

       

He забывайте, что главное различие между таблицей и представлением заключается в том, что таблица содержит реальные данные и занимает физическое пространство, а представление не содержит реальных данных и не требует дополнительного места, кроме места для хранения своего определения (т е соответствующего оператора запроса)