10.1.VIEWS 10.1.1. Tạo view 10.1.1. Tạo view
View là một table logic, view không phải là nơi lưu trữ dữ liệu ở mức vật lý. Các thành phần của view dựa trên table hoặc là trên view khác. Mọi tác động lên view đều gây ảnh hưởng tới table của view đó, và ngược lại. Để định nghĩa một view dùng query trên một bảng hay một view nào đó.
Cú pháp:
CREATE [OR REPLACE] [FORCE] VIEW view_name [(column, column,...)] AS
SELECT statement
[WITH CHECK OPTION [CONSTRAINT constraint_name]];
Trong đó:
OR REPLACE Để tạo view chèn lên view cùng tên
FORCE Để tạo view cả khi table hay view nào đó
không tồn tại trong câu lệnh SELECT.
column, column Tên các column của view
WITH CHECK OPTION Nếu có lệnh insert hoặc update lên vieư, ql
sẽ kiểm tra điều kiện phù hợp trong mệnh đề where của view. Nếu không dữ liệu sẽ chỉ kiểm tra các ràng buộc toàn vẹn của bảng.
CONSTRAINT Chỉ ra tên của điều kiện kiểm tra.
Ví dụ 1:
CREATE VIEW emp_view AS
SELECT empno, ename, sal FROM emp WHERE deptno = 10;
Ví dụ 2:
CREATE VIEW dept_summary
(name, minsal, maxsal, avsal) AS
SELECT dname, min(sal), max(sal), avg(sal) FROM emp, dept FROM emp, dept
WHERE emp.deptno = dept.deptno GROUP BY dname;
Ví dụ 3:
CREATE VIEW dept_view AS
SELECT eame, sal*12 Annsal FROM emp
WHERE deptno = 20
WITH CHECK OPTIION CONSTRAINT dept_check;
10.1.2. Xóa các view
Chỉ những người tạo view mới có quyền DROP
DROP VIEW dept_view;
View có thể thực hiện các lệnh SQL sau:
SELECT
INSERT (insert trên view cũng ảnh hưởng lên table)
Update (ảnh hưởng lên table)
Comment
Tuy nhiên có những ràng buộc sau:
Không thể insert, update trên view, khi query của view chứa các toán tử join, set, distinct, group by, group.
Không thể nào insert, update trên view, nếu như trong view có dùng with check option.
Không thể nào insert trên view, trên table có những cột not Null mà không dùng default value ( bởi vì trong trường hợp này view sẽ có ít colunm hơn table table. Nên insert 1 row vào view, thực chất là insert row đó vào table sẽ không hợp lệ).
Không thể nào insert trên view, nếu view này có dùng biểu thức decode.
Những query của view không thể nào tham khảo vào 2 column giả nextval, currval (nextval, currval dùng cho sequence).