1. 查询视图: 可依赖于多个基表.
SELECT * FROM view_name; /* 类似于查询表数据*/
2. 更新视图的前提:
没有使用连接函数, 集合运算和组函数. 创建视图的select 语句中没有集合函数且没有GROUP BY,ONNECT BY ,START WITH 子句及DISTINCT 关键字. 创建视图的SELECT 语句中不包含从基表列通过计算所得的列. 创建视图没有包含只读属性.
3. 插入数据
INSERT INTO view_name VALUES();
4. 修改数据:
UPDATE view_name SET …
若一个视图依赖于多个基本表, 则一次修改该视图只能修改一个基本表的数据.
5. 删除数据:
Delete from view_name where …
同样, 当视图依赖多个基表时, 不能使用此语句来删除基表中的数据. 只能删除依赖一个基表的数据.
6. 修改视图定义:
修改视图的好处在于, 所有相关的权限都依然存在. 语法同创建视图相同.
7. 删除视图:
DROP VIEW view_name;
只有视图所有者和具备DROP VIEW 权限的用户可以删除视图。删除视图的定义不影响基表中的数据。视图被删除后,基于被删除视图的其他视图或应用将无效。
五. 示例
5.1 dba_segments 表里没有视图的信息
SQL> select distinct(segment_type) from dba_segments group by segment_type;
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;
ID NAME
---------- --------------------
1 dave
SQL> create view view_dave as select * from v_dave;
视图已创建。
SQL> select * from view_dave;
ID NAME
---------- --------------------
1 dave
上面我们创建了一个表和一个视图。 下面我们对视图进行增删改操作。
5.2.1 对视图进行insert 操作
SQL> insert into view_dave values(2,'tianlesoftware');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from v_dave;
ID NAME
---------- --------------------
1 dave
2 tianlesoftware
SQL> select * from view_dave;
ID NAME
---------- --------------------
1 dave
2 tianlesoftware
最视图添加的记录,写道了对应的基表里。
5.2.2 对视图进行delete 操作
SQL> delete from view_dave where id =2;
已删除 1 行。
SQL> commit;
提交完成。
SQL> select * from view_dave;
ID NAME
---------- --------------------
1 dave
SQL> select * from v_dave;
ID NAME
---------- --------------------
1 dave
对视图的delete,同样修改的是基表。
5.2.3 对视图进行update
SQL> update view_dave set name='tianlesoftware' where id=1;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select * from v_dave;
ID NAME
---------- --------------------
1 tianlesoftware
SQL> select * from view_dave;
ID NAME
---------- --------------------
1 tianlesoftware
5.3 查看视图的信息dba_views
SQL> desc dba_views;
名称 是否为空? 类型
----------------------------------------- -------- ----------------
OWNER NOT NULL VARCHAR2(30)
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
TYPE_TEXT_LENGTH NUMBER
TYPE_TEXT VARCHAR2(4000)
OID_TEXT_LENGTH NUMBER
OID_TEXT VARCHAR2(4000)
VIEW_TYPE_OWNER VARCHAR2(30)
VIEW_TYPE VARCHAR2(30)
SUPERVIEW_NAME VARCHAR2(30)
EDITIONING_VIEW VARCHAR2(1)
READ_ONLY VARCHAR2(1)
查看视图的定义:
SQL> select text from dba_views where view_name='VIEW_DAVE';
TEXT
--------------------------------------------------------------
select "ID","NAME" from v_dave