如果另一个表被更改,则更改一个表的方法

Ста*_*аев 1 sql oracle ddl plsql oracle11g

例如,我有表T1和存档表T1_A

Create table T1(n number); 
Create table T1_A(archieve_dt date,n number);
Run Code Online (Sandbox Code Playgroud)

如果要在T1中添加一列,要使激活正常工作,我需要在T1_A中添加同一列。

有什么电话吗?

Alter table T1_A add n1 number;
Run Code Online (Sandbox Code Playgroud)

如果我打电话给这个

Alter table T1 add n1 number;
Run Code Online (Sandbox Code Playgroud)

找不到有关此类触发器的任何信息。

APC*_*APC 5

概括地说,如果您需要执行此操作,则数据模型将损坏。仅仅因为一个表获得了一个新列,没有理由让其他表自动获得相同的新列。

将DDL应用于表应该是明智的人为判断问题,并且应以受控方式执行,理想情况下,脚本不受源代码控制。使数据库中的触发器产生列将是一个噩梦(即使有可能,也有可能)。对于缺乏对生产中架构更改的控制权,大多数经理会非常担心。

显然,这里您似乎在归档方​​面有特殊情况,但实际上适用相同的原理。考虑如果要从T1中删除一列怎么办?您是否还要从存档表中删除该列?也许吧,也许不是。同样,如果更改是为了修改数据类型。在这两种情况下,您都需要做出有关如何将更改应用于存档表的体系结构决策。

然后,当然还有如何用新列填充存档表的问题。大概有一个触发器。好了,触发器将不得不更改,虽然从数据字典生成触发器主体是很常见的,但它仍然不是您希望自动发生的事情。

如果您需要将同一列添加到多个表中,则只需编写多个ALTER TABLE语句即可。如果有太多需要手工编写的内容-并且您不认为这是一个危险的信号-那么您可以使用带有查询的语句来生成语句,该查询会导致数据字典无法使用。