【问题标题】:Do views get updated automatically after a DDL change on the underlying table?基础表上的 DDL 更改后视图是否会自动更新?
【发布时间】:2017-05-10 19:47:14
【问题描述】:

总的来说,我是 teradata 和 SQL 的新手。

假设我有一个表 SCHOOL,其中包含以下列:id、name、role。并在此表之上构建了一个视图:

创建或替换视图教师为 SELECT * FROM SHERE ROLE = 'TEACHER'​​;

我现在向 SCHOOL 添加一个新列,例如 subject_name。我是否需要重新执行 CREATE OR REPLACE VIEW 语句,以便 TEACHER 开始拾取这个新列,或者它是动态的并且添加列将自动导致视图在下次调用时拾取新列。

【问题讨论】:

  • 试试看会发生什么。
  • 要么刷新要么重新编译,除非你使用表值函数(不​​确定 teradata 是否得到这个)
  • CREATE OR REPLACE 在 Teradata 中无效,它是 Oracle 语法。根据标准 SQL,视图在创建时被解析,因此不会自动包含新列。查看SHOW QUALIFIED SELECT * FROM TEACHER;返回的内部源代码
  • 我认为 REPLACE VIEW 是在 TD 中使用的一种,因为它创建了本来不存在的视图。
  • REPLACE VIEW 是他们在 TD 中使用的,但你明白我的意思。

标签: sql view teradata ddl


【解决方案1】:

他们没有。需要重新编译“select * from”。

【讨论】:

  • 感谢您的确认。
【解决方案2】:

每次更改表格时都需要替换视图。
视图定义中的“select *”表示“在创建视图时从表中选择所有列”。如果表随后发生更改(通过添加或删除列),则视图可能不一致。 这就是为什么有些人喜欢在视图中命名所有列以支持使用“*”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多