OLD and NEW Pseudorecords for dynamic columns & Alternate

时间:2015-05-04 19:24:45

标签: plsql triggers oracle11g


AFAIK and what I saw in other answers, dynamic column check in trigger is not possible.
But it is worth to reconfirm and find alternatives as this will save lot of rework on every new column addition.
Scenario is : Table contains many columns and we need to write every update entry in other table. These updates can be on any column.
Is there any efficient way where we can avoid column name hardcoding in trigger ?

3 个答案:

答案 0 :(得分:1)

我们使用过程在表中添加/删除/更改列,这也根据表定义生成并编译了触发器和CRUD过程。

答案 1 :(得分:1)

触发器应该被视为表的一部分,触发器和表之间不应该有任何抽象。我是抽象的忠实粉丝,并尽可能使用它 - 这不是那些地方之一。

如果基础表应以任何方式更改 - 无论是添加列,删除列,还是仅重命名或重新键入列 - 应根据需要重写表上的所有触发器。他们必须与桌子紧密结合才能尝试其他方式。

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

触发器就像一个类的方法。他们知道隐藏在课堂壁橱里的所有肮脏的小秘密,并努力保护隐藏的秘密。他们必须了解壁橱的每一个细节,并对所有变化作出回应。

以另一种方式看待它。 SQL的基本思想(以及DBMS本身的扩展)是用户要求他们想要的数据。用户没有指定获取该数据的步骤(它是声明性的而不是程序性的)。 DBMS分析请求(声明)并为自己找出获取数据(过程)的最佳方法。触发器是隐藏过程的一部分。

这是一项设计功能,可帮助您为用户提供可扩展,响应迅速的自适应产品,而不是一个可以解决的故障。

答案 2 :(得分:0)

是。
这是2步骤,有2个触发器 第一个触发器是DDL触发器,它将触发DDL更改并将重写更新触发器[步骤2]。

物化视图日志再次是现有表的副本,否则这可以提供很多帮助。