Создайте представление EMPLOYEES_VU. Включите номер служащего, фамилию служащего и номер отдела из таблицы EMPLOYEES. Смените заголовок столбца с фамилией служащего на EMPLOYEE.
create view EMPLOYEES_VU as(
select employee_id, last_name EMPLOYEE, department_id from employees
);
Выведите содержимое представления EMPLOYEE_VU.
select * from EMPLOYEES_VU;
EMPLOYEE_ID
EMPLOYEE
DEPARTMENT_ID
OConnell
Grant
Whalen
Hartstein
Fay
Mavris
Baer
Higgins
Gietz
King
Kochhar
De Haan
Hunold
Ernst
Austin
Pataballa
Lorentz
Greenberg
Faviet
Chen
Sciarra
Urman
Popp
Raphaely
Используя своё представление EMPLOYEES_VU, создайте запрос для вывода всех фамилий и номеров отделов служащих.
select employee, department_id from EMPLOYEES_VU;
EMPLOYEE
DEPARTMENT_ID
OConnell
Grant
Whalen
Hartstein
Fay
Mavris
Baer
Higgins
Gietz
King
Kochhar
De Haan
Hunold
Ernst
Austin
Pataballa
Создайте представление DEPT50, содержащее номер служащего и номер отдела для всех служащих отдела 50. Назовите столбцы представления EMPNO, EMPLOYEE и DEPTNO. Запретите операцию перевода служащего в другой отдел через представление.
create view DEPT50 as(
select employee_id EMPNO, last_name EMPLOYEE, department_id DEPTNO from employees where department_Id=50
) with check option constraint DEPT50_ck;
Выведите содержимое представления DEPT50.
select * from DEPT50;
EMPNO
EMPLOYEE
DEPTNO
OConnell
Grant
Weiss
Fripp
Kaufling
Vollman
Mourgos
Nayer
Mikkilineni
Landry
Markle
Bissot
Atkinson
Marlow
Olson
Попробуйте сменить номер отдела служащего по фамилии Matos на 80.
update DEPT50 set DEPTNO=80 where EMPLOYEE='Matos';
Error report:
SQL Error: ORA-01402: представление WITH CHECK OPTION не соответствует фразе WHERE
01402. 00000 - "view WITH CHECK OPTION where-clause violation"
Дополнительное задание
Создайте представление SALARY_VU, включающее фамилию служащего, название отдела, оклад и категорию оклада для всех служащих. Используйте таблицы EMPLOYEES, DEPARTMENTS и JOB_GRADES. Соответственно назовите столбцы Employee, Department, Salary и Grade.
create view SALARY_VU as(
select e.last_name "Employee", d.department_name "Department", e.salary "Salary", g.grade_level "Grade" from employees e left join departments d on (e.department_id=d.department_id)
left join job_grades g on (e.salary between g.lowest_sal and highest_sal)