将表A的内容复制到表B(比表A多一列)

时间:2012-02-21 12:32:54

标签: sql oracle

在我们的应用程序中,我们有两组表:一组工作表(包含当前分析的数据)和另一组存档表(所有数据甚至已被分析,相同的表名但具有一个a_前缀)。表的结构是相同的,除了归档表有一个额外的列run_id来区分不同的数据集。

目前,我们有一个SQL脚本,用以下类似的语句复制内容:

insert into a_deals (run_id, deal_id, <more columns>) 
select maxrun, deal_id, <more columns> 
from deals,
  (select    max(run_id) maxrun from batch_runs);   

这很好用,但每当我们向表中添加一个新列时,我们也必须对脚本进行mpdify。当我们有新的列时,有更好的方法可以做到这一点吗? (当然结构必须匹配,但我们也希望不必更改脚本。)

FWIW,我们使用Oracle作为我们的RDBMS。

2 个答案:

答案 0 :(得分:4)

在第一个答案之后,您可以构建一个pl / sql过程,该过程将读取all_tab_columns以构建insert语句,然后执行immediate。不是太难,但要小心你允许的输入参数(table_name等)以及谁可以运行它,因为它可以为SQL注入提供一个很好的机会。

答案 1 :(得分:1)

如果2个表具有相同顺序的SAME列(all_tab_columns中的column_id),除了前面的run_id,那么您可以执行以下操作:

insert into a_deals
select (select max(run_id) from maxrun), d.*
from deals
where ...;

这是一个懒惰的方法,你需要确保两个表的列位于此脚本的一部分(检查all_tab_columns)。切换的2个varchar2字段将导致数据插入到错误的字段中。