我有一个关于针对具有不同数据结构(Oracle)的表的统一插入查询的问题。让我用一个例子来详细说明:
tb_customers (
id NUMBER(3), name VARCHAR2(40), archive_id NUMBER(3)
)
tb_suppliers (
id NUMBER(3), name VARCHAR2(40), contact VARCHAR2(40), xxx, xxx,
archive_id NUMBER(3)
)
所有表中唯一存在的列是 [archive_id]。计划是通过将所有记录复制(复制)到不同的数据库分区并相应地增加这些记录的 archive_id 来创建数据集的新存档。[archive_id] 始终是主键的一部分。
我的问题是使用 select 语句来进行数据的实际复制。因为列是可变的,所以我很难想出一个统一的选择语句来复制数据并更新archive_id。
一种解决方案(有效)是遍历存储过程中的所有表并执行以下操作:
CREATE TABLE temp as (SELECT * from ORIGINAL_TABLE);
UPDATE temp SET archive_id=something;
INSERT INTO ORIGINAL_TABLE (select * from temp);
DROP TABLE temp;
我不太喜欢这种解决方案,因为 DDL 命令会破坏所有还原点。
其他人有任何解决方案吗?