Выбрать главу

FROM user_constraints

WHERE table_name IN ( ‘ CHEAP_PR0DUCTS_VIEW2’ , ' CHEAP_PR0DUCTS_VIEW3’ );

CONSTRAINT_NAME С STATUS DEFERRABLE DEFERRED

CHEAP_PR0DUCTS_VIEW2_PRICE V ENABLED NOT DEFERRABLE IMMEDIATE

CHEAP_PR0DUCTS_VIEW3_READ_0NLY 0 ENABLED NOT DEFERRABLE IMMEDIATE

Значение constraint_type для CHEAP_PR0DUCTS_VIEW2_PRICE равно V, что в

соответствии с таблицей 10.3 соответствует ограничению CHECK OPTION.

Значение constraint_type для CHEAP_PR0DUCTS_VIEW3_READ_0NLY равно О, что

соответствует ограничению READ ONLY.

Создание и использование сложных представлений

Сложные представления содержат подзапрос, который:

■ выполняет выборку из нескольких таблиц;

346 Глава 10

■ группирует строки, используя фразы GROUP BY или DISTINCT;

■ содержит вызовы функций.

В следующем примере создается представление по имени products_

and_types_view, в подзапросе которого выполняется полное внешнее соединение

таблиц products и products_types с использованием синтаксиса

SQL/92:

□ CREATE VIEW products_and_types_view AS

SELECT p.product_id, p.name product_name, pt.name product_type_name, p.

price

FROM products p FULL OUTER JOIN product_types pt

USING (product_type_id)

ORDER BY p.product_id;

В следующем примере делается запрос к этому представлению:

□ SELECT *

FROM products_and_types_view;

ID PR0DUCT_NAME PR0DUCT_TY PRICE

1 Modern Science Book 19.95

2 Chemistry Book 30

3 Supernova Video 25.99

4 Tank War Video 13.95

5 Z Files Video 49.99

6 2412: The Return Video 14.95

7 Space Force 9 DVD 13.49

8 From Another Planet DVD 12.99

9 Classical Music CD 10.99

10 Pop 3 CD 15.99

11 Creative Yell CD 14.99

12 My Front Line 13.49

13 Western Front Book 13.5

14 Eastern Front Book 16.5

В следующем примере создается представление employees_salary_

grades_view, в подзапросе которого используется внутреннее соединение

для получения тарифных разрядов для сотрудников:

□ CREATE VIEW employees_salary_grades_view AS

SELECT e.first_name, e.last_name, e . t i t le , e.salary, sg.salary_grade_id

FROM employees e INNER JOIN salary_grades sg

ON e.salary BETWEEN sg.low_salary AND sg.high_salary

ORDER BY sg.salary_grade_id;

В следующем примере выполняется запрос к employees_salary_grades_

view:

□ SELECT *

FROM employees_salary_grades_view;

Создание таблиц, последовательностей, индексов и представлений 347

FIRSTJIAME LAST_NAME TITLE SALARY SALARY_GRADE_ID

Fred

Susan

Ron

James

Hobbs Salesperson 150000

Jones Salesperson 500000

Johnson Sales Manager 600000

Smith CEO 800000

23

4

В следующем примере создается представление product_average_view,

подзапрос которого использует

■ Фразу WHERE для отбора из таблицы products строк, цены которых ниже

15 долларов.

■ Фразу GROUP BY для группировки оставшихся строк по столбцу

product_type_id.

■ Фразу HAVING для отбора групп строк, для которых средняя цена больше

13 долларов.

□ CREATE VIEW product_average_view AS

SELECT product_type_id, AVG(price) average_price

FROM products

WHERE price < 15

GROUP BY product_type_id

HAVING AVG(price) > 13

ORDER BY product_type_id;

В следующем примере выполняется запрос к product_average_view:

□ SELECT *

FROM product_average_view;

PR0DUCT_TYPE_ID AVERAGE_PRICE

Модификация представления

Можно полностью заменить представление, используя оператор CREATE OR

REPLACE VIEW. Следующий оператор использует CREATE OR REPLACE VIEW для

замены product_average_view:

□ CREATE OR REPLACE VIEW product_average_view AS

SELECT product_type_id, AVG(price) average_price

FROM products

WHERE price < 12

GROUP BY product_type_id

HAVING AVG(price) > 11

ORDER BY product_type_id;

Вы можете изменить ограничения для представления с использованием

ALTER VIEW. В следующем примере используется ALTER VIEW для удаления

1 13.5

2 14.45

3 13.24

13.49

348 Глава 10

из представления cheap_products_view2 ограничения cheap_products_

view2_price:

□ ALTER VIEW cheap_products_view2

DROP CONSTRAINT cheap_products_view2_price;

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

Для удаления представления используется оператор DROP VIEW. В следующем

примере удаляется представление cheap_products_view2 :

□ DROP VIEW cheap_products_view2;

На этом мы завершим обсуждение представлений. В следующем разделе

вы узнаете об архивах ретроспективных данных.

Архивы ретроспективных данных

Архивы ретроспективных данных, являющиеся нововведением в Oracle

l lg , хранят изменения, выполненные в таблице в течение некоторого

промежутка времени, и- предоставляют для вас полный аудиторский след.

Как только вы создадите ретроспективный архив и добавите к нему таблицу,

вы сможете:

■ просматривать строки в том виде, как они выглядели для заданной

метки даты-времени;

■ просматривать строки в том виде, как они выглядели между двумя

метками даты-времени.

Ретроспективный архив создаётся при помощи выражения CREATE

FLASHBACK ARCHIVE. В следующем примере выполняется подключение под

пользователем system и создание ретроспективного архива с именем test_

archive:

□ CONNECT system/manager

CREATE FLASHBACK ARCHIVE test_archive

TABLESPACE example

QUOTA 1 M

RETENTION 1 DAY;