一、对视图进行DML操作
1.创建一个视图v_person
create or replace noforce view v_person
as select * from person where id between 1003 and 1007;
2.向视图v_person中进行insert操作
insert into v_person (id,name) values(1010,’J’)
【注意】对视图进行DML操作时候,只能对简单视图执行DML操作;复杂视图不支持DML操作。由于v_person没有使用with check option,因此对于子查询检索到的行可以进行增删改查。
例1:练习对视图(没有with check option)插入数据。
解:当前用户下视图v_stu的数据
视图v_stu的基表是student表,该表当前的数据:
对视图插入新数据:
查询视图发现多了一行:
查询基表发现多了一行:
因此,对视图进行DML操作可达到修改基表数据的效果。
例2:练习对视图(有with check option)插入数据。
解:创建视图并将已存在的视图覆盖,带上with checkoption:
然后插入如下数据:
报错原因是’男’不满足视图中的where条件,视图有with check option是对新数据进行校验,如果满足where条件,则允许插入,否则不允许。
同理,如下报错是因为视图在创建的时候要求只读,即with read only:
例3:练习两张基表生成视图且验证能否在该视图中插入新数据。
解:当前的sc表:
当前的course表:
基于sc表和course表创建视图v_2,注意下图SQL命令:
向视图中插入新数据:
报错原因是该视图是基于两张表创建的,所以无法插入新数据。
【注意】
以下三种情况无法oracle账号对视图做DML操作:
1.带有withcheck option的视图,如果插入数据不满足where条件则无法做DML操作,如例2;
2.带有withread only的视图,如例2;
3.基于两张及两张以上基表的视图,比如student,course,sc表生成一个视图,那么这个视图无法做DML操作如例3。