Представления Что такое представления? S_EMP Table EMPVU45 View ID LAST_NAME FIRST_NAME TITLE DEPT_ID 1 Velasquer Carmen President 50 2 Ngao LaDoris VP, Operations 41 3 Nadayama Midor VP, Sales 31 4 Qick-To-See Mark VP, Finance 10 5 Ropeburn Audry VP, Administrator 50 6 Urghart Molly Warehouse Manager 41 7 Menchu Robeka Warehouse Manager 42 8 Biri Ben Warehouse Manager 43 9 Catchpole Antoinetts Warehouse Manager 44 10 Havel Marta Warehouse Manager 45 11 Magee Colin Sales Representative 31 12 Giljum Henry Sales Representative 32 13 Segeghi Yanry Sales Representative 33 Mai Sales Representative 34 Andre Sales Representative 35 14 ID LAST_NAME TITLE 15 10 Havel 16 Warehouse Manager 17 Elena Stock Clerk 41 George Stock Clerk 41 24 Dancs 18 Warehouse Manager 19 Akira Stock Clerk 42 Vikram Stock Clerk 42 25 Schwartz Stock20 Clerk 21 Chad Stock Clerk 43 Eddie Stock Clerk 44 22 Patel Radha Stock Clerk 34 23 Dancs Bela Stock Clerk 45 24 Schwartz Sylvie Stock Clerk 45 Преимущества представления • Ограничение доступа к базе данных • Упрощение запросов • Разные способы показа одних и тех же данных Создание представлений: синтаксис • Представление создается путем включения подзапроса в команду CREATE VIEW CREATE [OR REPLAСE] [FORCE|NOFORCE] VIEW view [(alias[, alias]…)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] • Подзапрос может содержать сложную команду SELECT • Использование в подзапросе предложения ORDER BY не разрешается Простые и сложные представления Простые представления Сложные представления Количество таблиц Одна Одна или больше Содержит функции Нет Да Содержит группы данных Нет Да Операции DML над представлением Да Нет Создание представления: пример • Создайте представление EMPVU45, включающее учетный номер, фамилию и должность каждого служащего отдела номер 45 SQL> 2 3 4 View CREATE VIEW empvu45 AS SELECT id, last_name, title FROM s_emp WHERE dept_id=45; created • Получите описание представления с помощью команды DESCRIBE SQL*Plus • Произведите выборку данных путем ввода команды SELECT со ссылкой на это представление Создание представления: пример • Создайте представление с псевдонимами столбцов в подзапросе SQL> 2 3 4 5 View CREATE VIEW salvu41 AS SELECT id, first_name FIRST, last_name LAST, salary MONTHLY_SALARY FROM s_emp WHERE dept_id=41; created • Выберете столбцы из этого представления по заданному псевдониму Изменение представления: пример • Измените представление EMPVU45 с помощью команды CREATE OR REPLAСE. Добавьте псевдоним для каждого столбца SQL> CREATE OR REPLAСE VIEW empvu45 (id_number, employee, job) 2 AS SELECT id, last_name, title 3 FROM s_emp 4 WHERE dept_id = 45; View created • Псевдонимы столбцов в команде CREATE VIEW указываются в таком же порядке, как столбцы в подзапросе Создание сложного представления: пример Создание сложного представления с групповыми функциями для выбора данных таблиц. SQL> CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.name, MIN(e.salary), MAX(e.salary), AVG(e.salary) FROM s_emp e, s_dept d WHERE e.dept_id=d.id GROUP BY d.name; View created. Правила выполнения операций DML над представлением • Операции DML могут быть выполнены только с простым представлением. • Удаление строк невозможно, если представление содержит следующее: - условие соединения - групповые функции - предложение GROUP BY - команду DISTINCT Правила выполнения операций DML над представлением • Нельзя изменять данные в представлении, если оно содержит: - одно из вышеуказанных условий. - столбцы, описанные как выражения. - псевдостолбец ROWNUM. • Нельзя добавлять данные в представление, если оно содержит: - Одно из вышеперечисленных условий - Какие-либо столбцы NOT NULL, не выбранные в представлении. Представление WITH CHECK OPTION • Необходимо следить за тем, чтобы результаты операций DML оставались в пределах домена представления. SQL> 2 3 4 5 View CREATE OR REPLAСE VIEW empvu41 AS SELECT * FROM s_emp WHERE dept_id = 41 WITH CHECK OPTION CONSTRAINT empvu41_ck; created. • Попытка изменить номер отдела для какой-либо строки в представлении закончится неудачей, т.к. при этом нарушится ограничение CHECK OPTION. Запрет операций DML • Параметр WITH READ ONLY в определении представления запрещает операции DML с этим представлением. SQL> 2 3 4 5 6 View CREATE OR REPLAСE VIEW empvu45 (id_number, employee, job) AS SELECT id, last_name, title FROM s_emp WHERE dept_id = 45 WITH READ ONLY; created. • При попытке выполнить операцию DML над какой-либо строкой представления, сервер Oracle выдает сообщение об ошибке ORA-01732. Просмотр определения представления Имя представления и его определения содержатся в таблице словаря данных USER_VIEWS. SQL> SELECT view_name, text 2 FROM user_views; Удаление представления: пример Удаление представления не вызывает потери данных, т.к. в основном представления лежат реальные таблицы базы данных. SQL> DROP VIEW empvu45; View dropped. Заключение • Представление создается на основе данных других таблиц или других представлений. • Представление – это окно для просмотра или изменения данных базовой таблицы. • Преимущества представления: - Ограничение доступа к базе данных - Упрощение запросов - Независимость данных - Различные способы показа одних и тех же данных - Возможность удаления без потери данных, лежащих в его основе Заключение • Представление может быть простым (основанным на данных одной таблицы) и сложным (основанным на данных нескольких таблиц или содержащим группы или функции). • Представления могут быть предназначены только для чтения. • Определение представления содержится в таблице USER_VIEWS словаря данных