如果我们有另一个视图的视图并且我们删除了父视图,那么另一个视图会发生什么?

时间:2009-06-17 09:40:58

标签: db2

如果我们查看另一个视图并删除父视图,那么另一个视图会发生什么?重新创建基本视图后,第二个视图是否会再次激活?

3 个答案:

答案 0 :(得分:1)

根据我对DB2(和一般SQL)中的视图的理解,它们有效地作为SQL select语句的别名。我希望在这种情况下,您的子视图仍然存在,但在删除父视图时查询它会导致错误。

由于存储了子视图的定义并保持静态,因此使用相同的对象名重新创建父视图应该会导致子视图再次返回预期的结果。

顺便说一句,这对你来说很容易验证。 : - )

答案 1 :(得分:1)

可能与this question中发生的情况相同。

答案 2 :(得分:0)

Michael Sharek的回答是正确的;依赖于被删除的视图的其余视图将保持无效(在SYSCAT.VIEWS中该行的VALID ='N'),即使在删除了删除的视图之后也是如此。您需要为SYSCAT.VIEWS中VALID ='N'的任何视图重新发出create语句,但好消息是您可以覆盖无效视图而不删除它。

我通常使用EXPORT来提取SYSCAT.VIEWS中每个视图的TEXT列的副本,其中VALID ='N'。然后我在该文件中执行DDL语句,并且通常在第一次传递时替换无效视图。但是,如果您具有更复杂的相互依赖视图层次结构,则可能需要多次运行该文件。没有必要为前一次传递期间生效的视图过滤掉DDL;这些语句将被一个重复的对象错误安全地拒绝。