--将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;--结束