首页 > 数据库 > Oracle > 转:Oracle视图
一. 视图的定义
二. 视图的作用
2.1 简单性。
2.2 安全性。
2.3 逻辑数据独立性。
三. 视图的基本语法:
CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name
[(column_name)[,….n]]
AS
Select_statement
[WITH CHECK OPTION[CONSTRAINT constraint_name]]
[WITH READ ONLY]
说明:
view_name :
column_name: 视图中的列名
在下列情况下 , 必须指定视图列的名称
* 由算术表达式 , 系统内置函数或者常量得到的列
* 共享同一个表名连接得到的列
* 希望视图中的列名与表中的列名不同的时候
REPLACE:
FORCE:
NOFORCE:
WITH CHECK OPTION
WITH READ ONLY
视图的定义原则:
四. 视图操作
在视图定义中没有设定READ ONLY 的前提下, 如果视图包含了下面的内容, 那么不能通过视图删除表中的数据:
* 分组函数, 如SUM,AVG,MIN,MAX 等
*
* 包含了表达式
* ROWNUM 伪列
1. 查询视图: 可依赖于多个基表.
SELECT
2. 更新视图的前提:
没有使用连接函数, 集合运算和组函数. 创建视图的select 语句中没有集合函数且没有GROUP BY,ONNECT BY ,START WITH 子句及DISTINCT 关键字. 创建视图的SELECT 语句中不包含从基表列通过计算所得的列. 创建视图没有包含只读属性.
3. 插入数据
INSERT
4. 修改数据:
UPDATE
若一个视图依赖于多个基本表, 则一次修改该视图只能修改一个基本表的数据.
5. 删除数据:
Delete from view_name where …
同样, 当视图依赖多个基表时, 不能使用此语句来删除基表中的数据. 只能删除依赖一个基表的数据.
6. 修改视图定义:
修改视图的好处在于, 所有相关的权限都依然存在. 语法同创建视图相同.
7. 删除视图:
DROP VIEW view_name;
五. 示例
5.1 dba_segments 表里没有视图的信息
SQL> select distinct(segment_type) from
dba_segments
SEGMENT_TYPE
------------------
LOBINDEX
INDEX PARTITION
NESTED TABLE
TABLE PARTITION
ROLLBACK
LOB PARTITION
LOBSEGMENT
TABLE
INDEX
CLUSTER
TYPE2 UNDO
已选择11行。
5.2 对视图的增删改操作都是在基表上进行的。
SQL> create table v_dave(id number,name varchar2(20));
表已创建。
SQL> insert into v_dave values(1,'dave');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from v_dave;
---------- --------------------
SQL> create view view_dave as select * from v_dave;
视图已创建。
SQL> select * from view_dave;
---------- --------------------
上面我们创建了一个表和一个视图。 下面我们对视图进行增删改操作。
5.2.1 对视图进行insert 操作
SQL> insert into view_dave values(2,'tianlesoftware');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from v_dave;
---------- --------------------
SQL> select * from view_dave;
---------- --------------------
最视图添加的记录,写道了对应的基表里。
5.2.2 对视图进行delete 操作
SQL> delete from view_dave where id =2;
已删除 1 行。
SQL> commit;
提交完成。
SQL> select * from view_dave;
---------- --------------------
SQL> select * from v_dave;
---------- --------------------
对视图的delete,同样修改的是基表。
5.2.3 对视图进行update
SQL> update view_dave set name='tianlesoftware' where id=1;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select * from v_dave;
---------- --------------------
SQL> select * from view_dave;
---------- --------------------
5.3 查看视图的信息dba_views
SQL> desc dba_views;
查看视图的定义:
SQL> select text from dba_views where view_name='VIEW_DAVE';
TEXT
--------------------------------------------------------------
select "ID","NAME" from v_dave
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24072291/viewspace-1116522/ ,如需转载,请注明出处,否则将追究法律责任。