gpt4 book ai didi

sql - 如何在 VIEW 输出子句中保留 "*"以便列跟踪表更改?

转载 作者:行者123 更新时间:2023-12-05 01:33:12 26 4
gpt4 key购买 nike

我正在创建这样的 Oracle View :

SELECT * FROM TABLE;

当我创建 View 时,我注意到 oracle 将 View 查询更改为类似:
SELECT FIELD1, FIELD2,... FROM TABLE;

我的问题是,如果我更改 TABLE 结构,例如添加一个新字段,则 View 中不会考虑这些更改。然后我必须重新创建 View ,并将此 View 的权限重新授予用户/角色。

有什么方法可以使 View 模式通用并将其保留为以下形式:SELECT * FROM TABLE?

谢谢。

最佳答案

您不能定义一个简单的 View ,它会在基础表更改时自动更改其结构。添加新列时,您需要触摸 View 。您几乎肯定需要按照@GordonLinoff 的建议进行操作并执行 CREATE OR REPLACE当表发生变化时。鉴于对表的更改应该很少发生并且应该涉及适当的更改控制,因此在更改过程中触摸 View 应该是一个相对简单的步骤。

如果您真的下定决心要避免触摸 View ,那么还有一些选择。我通常不会推荐这些,因为它们很可能会增加而不是降低维护系统的复杂性。但是,如果您有一个第三方系统生成 DDL 以在不可预测的基础上添加列,那么这可能是有道理的。

您可以创建一个 DDL 触发器来响应 ALTER 的语句而触发。表并使用 dbms_job 提交作业重新创建 View 。这是相当多的移动部分,但通常是可行的。

或者,您可以创建一个返回可变列数的流水线表函数,而不是 View 。那将是 really complicated但它也很光滑。没有多少地方让我觉得使用这种方法很舒服,因为没有多少人可以查看该代码并有机会维护它。但是代码非常流畅。

关于sql - 如何在 VIEW 输出子句中保留 "*"以便列跟踪表更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com