Oracle从主表填充备份表

Evi*_*ach 3 oracle copy

我当前分配给的程序要求在实际处理之前将表的内容复制到备份表.

在代码审查期间,一位同事指出了这一点

INSERT INTO BACKUP_TABLE
SELECT *
FROM PRIMARY_TABLE
Run Code Online (Sandbox Code Playgroud)

风险太大,因为表可能有不同的列和不同的列顺序.

我也受限于不创建/删除/重命名表.〜唉〜

表中的列预计会发生变化,因此简单地对列名进行硬编码并不是我正在寻找的解决方案.

我正在寻找合理的非风险方式来完成这项工作.

Jim*_*son 7

备份表是否存在?它是永久保存数据还是只是当前值的副本?

关于无法创建/删除/重命名/复制太糟糕了.否则,如果它是短期的,只是在出现问题时使用,那么你可以在处理开始时删除它并做类似的事情

create table backup_table as select * from primary_table;
Run Code Online (Sandbox Code Playgroud)

你最好的选择可能是选择明确,如

insert into backup_table (<list of columns>) select <list of columns> from primary_table;
Run Code Online (Sandbox Code Playgroud)

您可以通过从数据字典构建SQL字符串,然后立即执行来生成它.但是,如果backup_table不包含primary_table中的所有重要列,那么您仍将面临风险.

可能只是想明确它,如果backup_table不存在,或者primary_table中的任何列都不在backup_table中,则会引发重大错误.