double arrow

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

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

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

Примеры

Следующая инструкция создает модифицируемый вид:

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


Сейчас читают про: