WEB开发网
开发学院数据库Oracle 在Oracle的连接视图上进行数据更新操作 阅读

在Oracle的连接视图上进行数据更新操作

 2008-12-06 13:02:04 来源:WEB开发网   
核心提示:数据库视图是表的一个延伸对象,从理论上来说,在Oracle的连接视图上进行数据更新操作,在视图上使用DML语句对数据进行更新,最终都会在基础表上完成,则新增加记录的时候,这个字段就没有被赋值,也就是说,可以通过视图对基础表的内容进行修改

数据库视图是表的一个延伸对象。从理论上来说,在视图上使用DML语句对数据进行更新,最终都会在基础表上完成。也就是说,可以通过视图对基础表的内容进行修改。但是,往往没有这么简单。若想在连接视图上执行DML修改语句的话,需要严格的遵守一些限制。否则的话,DML语句不会执行成功。

假设现在人事管理系统中有三个表,一个是员工基本信息表,包含员工编号(非空)、员工姓名(非空)、身份证号码等字段;第二个表是企业部门职位表包含职位编号(非空)、职位名称(非空)、职位描述等字段;第三个是员工与部门职位对应表,包含员工编号(非空)、职位编号(非空)、描述等字段。

现在数据库管理员做了一张视图,查询员工编号、员工姓名、部门信息。此时,这张连接视图可以用DML语句来进行更新呢?这就要看其是否满足一定的条件。

条件一:在连接视图中不能有Order by排序语句。

若用户想要在上面这张视图中,更改员工所属的部门,则首先要考虑,在生成视图的查询语句中,是否使用了Order by排序语句。若有这个排序语句的话,则在视图上进行DML操作,是不会成功的。

这主要是因为采用了Order by排序语句后,记录的物理存储顺序发生了改变。此时,若在视图上进行了数据更新,则其对应的基础表找不到具体更改的物理位置。所以,会以失败告终。

所以,用户若想在上面这个视图界面对员工所属的部门进行更改的话,则一定不能够在SQL语句中加入Order by等排序语句。类似的,也不能够在SQL语句中含有Group by、connetc by等语句。若有这些语句的话,则数据库都不允许对数据进行数据更新操作。

条件二:基础表中所有的NOT NULL列都必须在这个视图中。

若想在视图上进行数据更新操作的话,则必须要求对应基础表中的所有不允许空的字段都在当前的视图中。其实这很好理解,若每个字段不允许为空,则又不在当前的视图中,则新增加记录的时候,这个字段就没有被赋值,故在保存时就会被基础表所拒绝。

1 2  下一页

Tags:Oracle 连接 视图

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接