我有一个MAIN_TABLE平。我需要将此表中的记录插入多个表格。
例如
MAIN_TABLE
col1, col2, col3, col4, col5
PARENT1_TABLE
PT1_ID(PK), col1,col2
PARENT2_TABLE
PT2_ID(PK), col3,col4
PARENT2_CHILD_TABLE
P2C_ID(PK), PT2_ID(FK), col5, col6
等等。
目标是,我必须将记录从平面MAIN_TABLE移动到我在上面定义的关系结构。
任何帮助都会受到高度赞赏吗?
谢谢
答案 0 :(得分:7)
在Oracle中,您可以执行Multi-Table inserts。 创建一个虚拟错误记录表
create global temporary table err_dump
(ORA_ERR_NUMBER$ NUMBER,
ORA_ERR_MESG$ VARCHAR2(2000),
ORA_ERR_ROWID$ UROWID(4000),
ORA_ERR_OPTYP$ VARCHAR2(2),
ORA_ERR_TAG$ VARCHAR2(2000));
然后为parent1添加一个唯一键(col1,col2),为parent2添加(col3,col4)。 使用多表插入加载到两个父表中。 LOG ERRORS INTO子句意味着任何进入父表的重复都将被删除。
INSERT ALL
INTO parent1_table (pt1_id, col1,col2)
VALUES (rn, col1,col2)
LOG ERRORS INTO err_dump REJECT LIMIT 99999999
INTO parent2_table (pt2_id, col3, col4)
VALUES (rn, col3, col4)
LOG ERRORS INTO err_dump REJECT LIMIT 99999999
SELECT rownum rn, col1, col2, col3, col4
FROM MAIN_TABLE;
最后,从MAIN中选择一个,加入parent1_table和parent2_table来获取新的PK,这是一个简单的插入PARENT2_CHILD_TABLE
答案 1 :(得分:2)
如果这是在SQL Server中,您可以创建MAIN_TABLE
的视图,然后在视图上写一个INSTEAD OF INSERT
触发器。这样,当您在INSERT
视图中MAIN_TABLE
记录时,您的触发器就可以将其解析为您的子表。 Link goodness