一次将一条记录插入表中的多个表

时间:2010-02-26 01:08:35

标签: sql mysql sql-server oracle

我有一个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移动到我在上面定义的关系结构。

任何帮助都会受到高度赞赏吗?

谢谢

2 个答案:

答案 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