日期:2014-05-17  浏览次数:20803 次

多表导入自身数据问题
有4个表TA、TB、TC、TD
结构分别如下:
SQL code

表TA
TAID          TANAME         SNO
--------------------------------
1             省级1          002
2             省级2          002
......


表TB
TBID   TAID       TBNAME    SNO
-------------------------------
1        1        市级1     002
2        1        市级2     002
3        2        市级3     002
......

表TC
TCID   TAID   TBID    TBNAME   SNO
-----------------------------------
1        1     1       县级1   002
2        1     2       县级2   002
3        2     2       县级3   002
......


表TD
TDID   TAID   TBID  TCID  TBNAME   SNO
---------------------------------------
1        1     1     2    村级1    002
2        1     2     2    村级2    002
3        2     2     3    村级3    002
......





聪明的您一定看出来了,这是逐级下分的表,每个表第一个字段是主键,添加数据时此值来自各自的序列值,现在问题是:
需要复制这四个表现有的数据在本表中,改动每个表的SNO字段值,如:002改为003,并将每个表的相应字段值改为对应新增记录的主键值,如表TA与TB新增记录后为:
SQL code

表TA
TAID          TANAME         SNO
--------------------------------
1             省级1          002
2             省级2          002

3             省级1          003
4             省级2          003

......

表TB
TBID   TAID       TBNAME    SNO
-------------------------------
1        1        市级1     002
2        1        市级2     002
3        2        市级3     002

5        3        市级1     003
6        3        市级2     003
7        4        市级3     003
......


其它表以此类推,数据量大,请高手指导,非常感谢






------解决方案--------------------
insert /* +parallel */ into select 

insert 里做动作,例如加并行,或者其它HINT提示
------解决方案--------------------
可以考虑先进行更新步骤“并将每个表的相应字段值改为对应新增记录的主键值”;
再进行插入操作。
------解决方案--------------------
insert into ...... returning into 变量

insert into 下级表 value( ...., 变量)

你的省的SNO是如何变化的?