oracle视图创建
Oracle视图(view)创建使用
视图是一张虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。(视图不是真实存在磁盘上的)
一、视图与表的区别
1、表需要占用磁盘空间,视图不需要
2、视图不能添加索引(所以查询速度略微慢点)
3、使用视图可以简化,复杂查询
4、视图的使用利于提高安全性
比如:不同用户查看不同视图
创建,修改,删除视图的基本操作
二、创建视图
语法结构:
CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW 视图名
AS
SELECT查询 (需要查询的结果)
[WITH READ ONLY CONSTRAINT] (设置是否可以对视图进行增删改查)
语法解析:
1. OR REPLACE:如果视图已经存在,则替换旧视图。
2. FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
3. NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。
4. WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。
三、删除视图
1、drop view 视图名
四、查询视图
查询视图和正常sql是一样的
Oracle 创建视图时报错,报ora-01031:insufficient privileges
在创建用户的时候如果直接给用户DBA权限,那么在B用户中可以直接查询A用户的表,但是在创建视图时就会报无权限,在这种情况下需要再在被访问的A用户里面去给予要访问该表的B用户授权。
--创建视图权限,一般网上找都是说的这句,但是光有这句还是无法创建
grant create view to B;
--授予查询权限
grant select any table to B;
--授予权限
grant select any dictionary to B;
以上3项地后就能正常创建视图了。