Добавление строк в представление
Обновление данных представления
Примеры
Следующая инструкция создает модифицируемый вид:
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 две таблицы и по этому только для чтения:
|
|
Данные представления можно обновить при следующих условиях.
• Представление не должно содержать связей.
• Представление не должно содержать выражения 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 забывайте, что главное различие между таблицей и представлением заключается в том, что таблица содержит реальные данные и занимает физическое пространство, а представление не содержит реальных данных и не требует дополнительного места, кроме места для хранения своего определения (т е соответствующего оператора запроса)