Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 更新视图与触发器_Sql_Oracle_Plsql_Triggers_Views - Fatal编程技术网

Sql 更新视图与触发器

Sql 更新视图与触发器,sql,oracle,plsql,triggers,views,Sql,Oracle,Plsql,Triggers,Views,我正在准备期末考试,遇到了这个问题: 解释为什么不建议更新视图。解释如何使用触发器支持视图更新 我在网上看过,读了几章书都没有用 我看到过一些观点,这些观点有助于让生活变得更轻松,但没有人反对这些观点 这是一个可能的答案吗 可以在TRIGGER语句中使用而不是子句,以避免表的更新。这将允许更新可以由一个视图表示的多个表 因此,我的问题是: 1.)为什么不建议更新视图 2.)如何使用触发器解决问题?有 这可能既令人沮丧又脆弱,因为视图和/或模式的未来演变可能会使视图不再具有固有的可更新性——因此破

我正在准备期末考试,遇到了这个问题:

解释为什么不建议更新视图。解释如何使用触发器支持视图更新

我在网上看过,读了几章书都没有用

我看到过一些观点,这些观点有助于让生活变得更轻松,但没有人反对这些观点

这是一个可能的答案吗

可以在
TRIGGER
语句中使用
而不是
子句,以避免表的更新。这将允许更新可以由一个视图表示的多个表

因此,我的问题是:

1.)为什么不建议更新视图

2.)如何使用触发器解决问题?

这可能既令人沮丧又脆弱,因为视图和/或模式的未来演变可能会使视图不再具有固有的可更新性——因此破坏了依赖于此功能的代码


以牺牲几行代码为代价,使用将有利于减少上述问题,并允许您更新非固有的可更新视图。您可以在固有的可更新视图上使用
而不是
触发器来覆盖默认行为。

在研究视图时,请确保依赖相对较新的数据,因为视图多年来发生了变化,因此有关该主题的旧观点可能无效。当视图第一次被设置为可更新时,限制很多,对操作的控制很少或根本不存在

在许多系统中,由于能够在视图上编写触发器,限制已经消失,控制也变得精确。我们现在可以准确地确定在DML到视图期间所有数据发生了什么。现在到了我不允许应用程序直接访问表的地步。所有源自应用程序的DML都必须通过视图(或存储过程,但它们不如视图触发器)。好处是如此巨大,我不明白为什么它没有成为一个普遍的标准

事实上,许多人对视图的“看法”(不幸的是,许多负责数据库的人)似乎停留在20世纪90年代。有些人根本不希望数据库中有任何视图。有些允许视图,但不允许将它们用于DML。许多人坚持给他们起一个特殊的名字(“VW_名字”、“name_视图”或类似的名字),这打破了一堵非常有用的数据抽象墙。数据抽象不是数据库的强项,所以尽可能地抓住它