Plsql 动态列的新旧伪记录&;候补

Plsql 动态列的新旧伪记录&;候补,plsql,triggers,oracle11g,Plsql,Triggers,Oracle11g,好了,我在其他答案中看到,动态列检入触发器是不可能的。 但值得再次确认并找到替代方案,因为这将节省每增加一个新专栏的大量返工。 情况是: 表包含许多列,我们需要在其他表中写入每个更新条目。这些更新可以位于任何列上。 有什么有效的方法可以避免触发器中的列名硬编码吗?我们使用了一些过程来添加/删除/更改表中的列,它还根据表定义生成和编译触发器和CRUD过程。触发器应视为表的一部分,并且触发器和表之间不应有任何抽象。我非常喜欢抽象,并尽可能地使用它——这里不是这样的地方 如果基础表应以任何方式更改


好了,我在其他答案中看到,动态列检入触发器是不可能的。
但值得再次确认并找到替代方案,因为这将节省每增加一个新专栏的大量返工。
情况是: 表包含许多列,我们需要在其他表中写入每个更新条目。这些更新可以位于任何列上。

有什么有效的方法可以避免触发器中的列名硬编码吗?

我们使用了一些过程来添加/删除/更改表中的列,它还根据表定义生成和编译触发器和CRUD过程。

触发器应视为表的一部分,并且触发器和表之间不应有任何抽象。我非常喜欢抽象,并尽可能地使用它——这里不是这样的地方

如果基础表应以任何方式更改(无论是添加列、删除列,还是重命名或重新键入列),则应根据需要重写表上的所有触发器。它们必然与表紧密地结合在一起,无法尝试其他方式

在OO语言中,类是抽象的基本单元。类方法中的代码知道类的实际结构,并根据需要使用它。如果对类进行内部更改,则重写受影响的方法以抽象掉任何更改,以便类用户看不到任何差异(如果可能)。方法代码没有被精确地抽象,因此应用程序代码可以被抽象

触发器类似于类的方法。他们知道隐藏在班级壁橱里的所有肮脏的小秘密,并努力将这些秘密隐藏起来。他们必须知道壁橱的每一个细节,并对所有的变化做出反应

换个角度看。SQL(扩展到DBMS本身)的基本思想是用户请求他们想要的数据。用户没有指定获取该数据的步骤(它是声明性的,而不是过程性的)。DBMS分析请求(声明)并自行确定获取数据的最佳方式(过程)。触发器是隐藏过程的一部分

它是一种设计功能,可帮助您向用户提供可扩展、响应迅速、适应性强的产品,而不是解决问题。

是。
这是一个包含两个触发器的两步流程。
第一个触发器是DDL触发器,它将在DDL更改时触发,并将重写更新触发器[步骤2]。


物化视图日志同样是现有表的副本,否则会有很大帮助。

不确定触发器中列的命名问题。如果您有一个历史表(与主表具有相同的结构+几个日期/标志字段),那么更改主表中的结构将只需要对历史表和触发器代码应用相同的更改。在我看来,这没什么大不了的,除非我遗漏了一些更大的问题?历史记录表包含以下内容:1)列名2)新值3)旧值4)按5)更改日期时间更改,所以结构不同。好吧,我仍然不明白为什么在更改主表结构时更改触发器是一个大问题。也许你可以发布你的触发代码。找到了最近的解决方案,但不是我要找的。