在Oracle的连接视图上进行数据更新操作
2008-12-06 13:02:04 来源:WEB开发网数据库视图是表的一个延伸对象。从理论上来说,在视图上使用DML语句对数据进行更新,最终都会在基础表上完成。也就是说,可以通过视图对基础表的内容进行修改。但是,往往没有这么简单。若想在连接视图上执行DML修改语句的话,需要严格的遵守一些限制。否则的话,DML语句不会执行成功。
假设现在人事管理系统中有三个表,一个是员工基本信息表,包含员工编号(非空)、员工姓名(非空)、身份证号码等字段;第二个表是企业部门职位表包含职位编号(非空)、职位名称(非空)、职位描述等字段;第三个是员工与部门职位对应表,包含员工编号(非空)、职位编号(非空)、描述等字段。
现在数据库管理员做了一张视图,查询员工编号、员工姓名、部门信息。此时,这张连接视图可以用DML语句来进行更新呢?这就要看其是否满足一定的条件。
条件一:在连接视图中不能有Order by排序语句。
若用户想要在上面这张视图中,更改员工所属的部门,则首先要考虑,在生成视图的查询语句中,是否使用了Order by排序语句。若有这个排序语句的话,则在视图上进行DML操作,是不会成功的。
这主要是因为采用了Order by排序语句后,记录的物理存储顺序发生了改变。此时,若在视图上进行了数据更新,则其对应的基础表找不到具体更改的物理位置。所以,会以失败告终。
所以,用户若想在上面这个视图界面对员工所属的部门进行更改的话,则一定不能够在SQL语句中加入Order by等排序语句。类似的,也不能够在SQL语句中含有Group by、connetc by等语句。若有这些语句的话,则数据库都不允许对数据进行数据更新操作。
条件二:基础表中所有的NOT NULL列都必须在这个视图中。
若想在视图上进行数据更新操作的话,则必须要求对应基础表中的所有不允许空的字段都在当前的视图中。其实这很好理解,若每个字段不允许为空,则又不在当前的视图中,则新增加记录的时候,这个字段就没有被赋值,故在保存时就会被基础表所拒绝。
- ››oracle 恢复误删除的表和误更新的表
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››Oracle 11g必须开启的服务及服务详细介绍
- ››oracle性能34条优化技巧
- ››oracle数据库生成随机数的函数
- ››Oracle 数据库表空间容量调整脚本
- ››oracle单库彻底删除干净的方法
- ››Oracle创建表空间、创建用户以及授权、查看权限
- ››oracle 中 UPDATE nowait 的使用方法
更多精彩
赞助商链接