【摘要】:对视图可以执行DML操作,这些操作实质上是作用在基表上。但是,对于较复杂的视图,如果其查询中包含了分组函数、GROUP BY子句、DISTINCT关键字、表达式定义的列或ROWNUM伪列等,就不能执行DML操作。查询数据字典视图USER_UPDATABLE_COLUMNS,可以了解视图中哪些列支持DML操作。例如,下面代码查看视图books_view中的列是否支持DML操作。如果在创建视图时使用WITH CHECK OPTION子句,则将限定对视图执行DML操作产生的结果必须满足视图子查询的条件;否则,将导致DML语句执行失败。
对视图可以执行DML操作,这些操作实质上是作用在基表上。一般而言,对简单视图可以完全执行数据查询、插入、更新、删除等操作。但是,对于较复杂的视图,如果其查询中包含了分组函数、GROUP BY子句、DISTINCT关键字、表达式定义的列或ROWNUM伪列等,就不能执行DML操作。
查询数据字典视图USER_UPDATABLE_COLUMNS,可以了解视图中哪些列支持DML操作。
例如,下面代码查看视图books_view中的列是否支持DML操作。
从查询结果可知,books_view视图中的所有列都支持DML操作,因此,可以对所有列执行DML操作,操作的结果直接反映到基表中。
例如,下面语句通过books_view视图向基表中插入数据。(www.daowen.com)
该例中,通过视图books_view向基表books插入了一条记录,其中图书价格为29.8元(小于32元),所以从books_view视图查询不到插入的数据。之所以上面语句能够成功执行,这是因为在创建books_view视图时没有使用WITH CHECK OPTION子句。
如果在创建视图时使用WITH CHECK OPTION子句,则将限定对视图执行DML操作产生的结果必须满足视图子查询的条件;否则,将导致DML语句执行失败。
例如,前面创建视图orders_view时使用了CHECK OPTION约束,所以在该视图上执行DML操作时,要求DML产生的结果数据要满足视图子查询的条件(即qty>100),而下面语句插入的qty值是90,违反了视图定义的CHECK OPTION约束,所以导致该SQL语句执行失败。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
有关Oracle数据库管理与开发的文章