数据库—》oracle数据表批量插入(防主键自增冲突)

--将A表的数据移到B表,假设A表和B表都有key1,key2字段,此处只举例移动key1,key2的值
DECLARE
  i              int := 0;--定义一个计数器
  newbasicobjid  int := 0;--定义B表最大的id
  oldtablecoount int := 0;--定义A表数据量
  oldmaxobjid    int := 0;--定义A表最大的id
  oldkey1 varchar2(100) := '';--定义一个varchar2类型的临时变量用来存A表的第一个字段
  oldkey2      int := 0;--定义一个int类型的临时变量存A表的第二个字段

BEGIN --开始
  select max(id) into newbasicobjid from table_B; --查询B表最大的id 并赋值给变量
  select count(*) into oldtablecoount from table_A;--查询A表的数据量 并赋值给变量
  select max(id) into oldmaxobjid from table_A; --查询A表最大的id 并赋值给变量
  for i in 1 .. oldtablecoount loop --for循环 循环范围1到A表的数据量
    select key1,
           key2,
      into oldkey1,
           oldkey2
      from table_A                 --从A表查出实际的字段值赋给临时变量
     where id = (oldmaxobjid + 1 - i);--为防止主键冲突,通过这个where条件就可以实现一条一条的查询
    newbasicobjid := newbasicobjid + 1;--for循环一次,就将插入新表的id+1,以实现主键自增长的效果
    insert into table_B    --开始插入数据, values中的字段个数要与 插入B表的字段个数一致       
      (id,
       key1,
       key2)
    values
      (newbasicobjid,
       oldkey1,
       oldkey2);
  end loop;
  commit;  --提交
END;--结束

猜你喜欢

转载自blog.csdn.net/nienianzhi1744/article/details/90229647
今日推荐