简单视图
CREATE VIEW salvu50
AS SELECT employee_id ID_NUMBER, last_name NAME,
salary*12 ANN_SALARY
FROM employees
WHERE department_id = 50;
指定列别名视图
CREATE OR REPLACE VIEW salvu50 (ID_NUMBER, NAME, ANN_SALARY)
AS SELECT employee_id, last_name, salary*12
FROM employees
WHERE department_id = 50;
创建复杂视图
CREATE OR REPLACE VIEW dept_sum_vu
(name, minsal, maxsal, avgsal)
AS SELECT d.department_name, MIN(e.salary),
MAX(e.salary),AVG(e.salary)
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
GROUP BY d.department_name;
如果视图包含以下内容,则不能删除行:
– 组函数
– GROUP BY 子句
– DISTINCT 关键字
– 伪列ROWNUM 关键字
如果视图包含以下内容,则不能修改视图中的数据:
• 组函数
• GROUP BY 子句
• DISTINCT 关键字
• 伪列ROWNUM 关键字
• 由表达式定义的列(如salary*12)
如果视图包括以下内容,则不能向视图添加数据:
• 组函数
• GROUP BY 子句
• DISTINCT 关键字
• 伪列ROWNUM 关键字
• 由表达式定义的列
• 基表中未被视图选中的NOT NULL 列
(如果视图包含的NOTNULL 列在基表中没有指定默认值,则不能向视图添加数据)
使用WITH CHECK OPTION 子句
如果尝试使用INSERT 语句插入department_id不为20 的一行,或者使用UPDATE 语句更新视图中任何行的部门编号,则操作会失败,因为这违反WITHCHECK OPTION 约束条件
CREATE OR REPLACE VIEW empvu20
AS SELECT *
FROM employees
WHERE department_id = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;
设置只读视图
CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT employee_id, last_name, job_id
FROM employees
WHERE department_id = 10
WITH READ ONLY ;
删除视图
只有创建者或具有DROP ANY VIEW 权限的用户才能删除视图
DROP VIEW empvu80;