共计 1628 个字符,预计需要花费 5 分钟才能阅读完成。
视图是一种虚表,使用 CREATE VIEW 语句来定义视图,该视图是基于一个或多个表或视图的逻辑表。一个视图本身不包含任何数据, 视图所基于的表称为基表。
视图就相当于一条 select 语句, 定义了一个视图就是定义了一个 sql 语句, 视图不占空间, 使用视图不会提高性能,但是能简化 sql 语句。
创建视图:
create view 视图名;
如:
create or replace view v_test as select * from test where age=10;
create or replace: 如果 view 存在就覆盖,不存在才创建。
删除视图:
drop view 视图名;
权限控制:
要在您自己的模式中创建视图,您必须具有 CREATE VIEW 系统特权。
要在其他用户的模式中创建视图,您必须具有 CREATE ANY VIEW 系统特权。
包含该视图的模式的所有者必须具有从视图所基于的所有表或视图中选择,插入,更新或删除行所必需的权限。
详细语句解析:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]…)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];
其中:
with read only 视图只读约束
with check option 不允许插入与 where 条件不符的记录,类似于 check 约束的功能.
通过视图修改数据:
CREATE VIEW clerk AS SELECT employee_id, last_name, department_id, job_id FROM employees
WHERE job_id = ‘PU_CLERK’ or job_id = ‘SH_CLERK’ or job_id = ‘ST_CLERK’;
使用视图修改基表的数据,只有员工的 ID,姓氏,部门号码和职位在该视图中可见,并且这些列只能在雇员是职员的行中更新:
UPDATE clerk SET job_id = ‘PU_MAN’ WHERE employee_id = 118;
有限制的修改:
连接视图是其视图子查询包含连接的视图。如果联接中至少有一列具有唯一索引,则可以在联接视图中修改一个基表。
CREATE VIEW locations_view AS
SELECT d.department_id, d.department_name, l.location_id, l.city
FROM departments d, locations l WHERE d.location_id = l.location_id;
新增记录 INSERT INTO locations_view VALUES(999, ‘Entertainment’, 87, ‘Roma’);
系统返回:ERROR at line 1:
ORA-01776: cannot modify more than one base table through a join view
可以查询系统表 USER_UPDATABLE_COLUMNS,查看连接视图中的列是否可更新。
SELECT column_name, updatable FROM user_updatable_columns
WHERE table_name = ‘LOCATIONS_VIEW’ ORDER BY column_name, updatable;
改成如下语句,操作成功
INSERT INTO locations_view (department_id, department_name) VALUES (999, ‘Entertainment’);
1 row created.
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-12/149299.htm