创建视图的时候使用 with check option 语句 保证插入和修改操作时视图只有年龄为22的学生。
SQL> connect system/lixiang666;
已连接。
SQL> select * from stu;
SON SNAME SAGE
-------- -------------------- ----------
1001 张三 18
1003 李四 22
1002 王五 19
SQL> create view st22
2 as
3 select son,sname,sage
4 from stu
5 where sage=22
6 with check option;
视图已创建。
SQL> insert into st22
2 values('2222','哈哈',22);
已创建 1 行。
SQL> insert into st22
2 values('1254','赵四',18);
insert into st22
*
第 1 行出现错误:
ORA-01402: 视图 WITH CHECK OPTION where 子句违规
SQL> select * from st22;
SON SNAME SAGE
-------- -------------------- ----------
1003 李四 22
2222 哈哈 22
SQL> select sage,count(*) from stu group by sage;
SAGE COUNT(*)
---------- ----------
22 2
18 1
19 1
SQL> create view viewtemp(sage,count)
2 as
3 select sage,count(*) from stu group by sage;
视图已创建。
SQL> select * from viewtemp;
SAGE COUNT
---------- ----------
22 2
18 1
19 1
SQL> insert into viewtemp values(30,3);
insert into viewtemp values(30,3)
*
第 1 行出现错误:
ORA-01733: 此处不允许虚拟列
SQL> update viewtemp set count=3 where sage=18
2 ;
update viewtemp set count=3 where sage=18
*
第 1 行出现错误:
ORA-01732: 此视图的数据操纵操作非法