如果另一个被改变,改变一个 table 的方法
Way to alter one table if another was altered
例如,我有 table T1 和存档 table T1_A
Create table T1(n number);
Create table T1_A(archieve_dt date,n number);
如果我向 T1 添加一列,要使激活正常工作,我需要向 T1_A 添加相同的列.
有什么方法可以调用吗?
Alter table T1_A add n1 number;
如果我调用这个
Alter table T1 add n1 number;
没有找到任何关于触发器的信息。
从广义上讲,如果您需要这样做,您的数据模型就会损坏。仅仅因为一个 table 获得了一个新列,其他 table 没有理由自动获得相同的新列。
将 DDL 应用于 table 应该是明智的人类判断问题,并以受控方式执行,最好是使用不受源代码控制的脚本。让数据库从触发器生成列将是一场回归噩梦(即使可能,也可能是)。大多数经理会严重担心缺乏对生产模式更改的控制。
很明显,您这里似乎有一个特殊的归档案例,但实际上同样的原则适用。考虑一下如果您要从 T1 中删除一列会发生什么情况?您是否还想从存档 table 中删除该列?也许,也许不是。同样,如果更改是修改数据类型。在这两种情况下,您都需要做出有关如何将更改应用到存档 table 的架构决策。
当然还有如何用新列填充存档 table 的问题。想必有一个触发器。好吧,触发器将不得不改变,虽然从数据字典生成触发器主体很常见,但它仍然不是您希望自动发生的那种事情。
如果您迫切需要将同一列添加到多个 table 中,只需编写多个 ALTER TABLE 语句即可。如果手写的内容太多——而且您不认为这是一个危险信号——那么您可以生成带有查询的语句,该查询会排除数据字典。
例如,我有 table T1 和存档 table T1_A
Create table T1(n number);
Create table T1_A(archieve_dt date,n number);
如果我向 T1 添加一列,要使激活正常工作,我需要向 T1_A 添加相同的列.
有什么方法可以调用吗?
Alter table T1_A add n1 number;
如果我调用这个
Alter table T1 add n1 number;
没有找到任何关于触发器的信息。
从广义上讲,如果您需要这样做,您的数据模型就会损坏。仅仅因为一个 table 获得了一个新列,其他 table 没有理由自动获得相同的新列。
将 DDL 应用于 table 应该是明智的人类判断问题,并以受控方式执行,最好是使用不受源代码控制的脚本。让数据库从触发器生成列将是一场回归噩梦(即使可能,也可能是)。大多数经理会严重担心缺乏对生产模式更改的控制。
很明显,您这里似乎有一个特殊的归档案例,但实际上同样的原则适用。考虑一下如果您要从 T1 中删除一列会发生什么情况?您是否还想从存档 table 中删除该列?也许,也许不是。同样,如果更改是修改数据类型。在这两种情况下,您都需要做出有关如何将更改应用到存档 table 的架构决策。
当然还有如何用新列填充存档 table 的问题。想必有一个触发器。好吧,触发器将不得不改变,虽然从数据字典生成触发器主体很常见,但它仍然不是您希望自动发生的那种事情。
如果您迫切需要将同一列添加到多个 table 中,只需编写多个 ALTER TABLE 语句即可。如果手写的内容太多——而且您不认为这是一个危险信号——那么您可以生成带有查询的语句,该查询会排除数据字典。