创建视图的语句是设置了 WITH CHECK OPTION 这个条件;
创建视图时,sql语句是这样写的:
CREATE OR REPLACE VIEW RZ_TST_VIEW AS WHERE SELECT * FROM RZ_TST WHERE CARDID=12345 OR CARDID=12347 WITH CHECK OPTION;
这个时候再进行插入操作的时候,报了如上图的错误,SQL语句如下:
INSERT INTO RZ_TST_VIEW (CARDID,NAME,ADDRESS,WDATE,SALARY,TXT)VALUES(1234578,'王麻子','幸福大街欸王五三号',to_date(sysdate),20084,'试图约束测试');
分析如下:创建试图的时候,由于自己加了限制条件CARDID=12345 OR CARDID=12347,所以,在进行新增的时候,发现新增不进去,由于新增的条件CARDID=1234578
导致发现假如新增成功以后,视图是没有办法根据现有的查询条件CARDID=12345 OR CARDID=12347查询出来咱们新增加的这一条数据,所以是错误的,所以在加了这个条件之后,如果添加的数据不符合之前在创建视图的时候所查询的条件,是不允许被插进去的!
解决办法:如果非要插入进去,可以先删除原有的数据,SQL如下:
DELETE FROM RZ_TST_VIEW WHERE CARDID=12345;
再进行重新插入:INSERT INTO RZ_TST_VIEW (CARDID,NAME,ADDRESS,WDATE,SALARY,TXT)VALUES(12345,'王麻子','幸福大街欸王五三号',null,20084,'试图约束测试');
插入成功;
在更新操作的时候,是不允许更新成查询不出来的数据的,比如将CARDID=12233,更新是不被允许的;
总结:任何操作在完成后,都应该符合创建视图所规定的,即应该是可见的,可以根据创建的条件被查询出来的,否则将是不被允许的;