Oracle存储过程 动态sql将备用表的数据插入的原表
答案:2 悬赏:80 手机版
解决时间 2021-01-27 10:14
- 提问者网友:凉末
- 2021-01-27 06:17
备用表的数据比较大,我的想法是,每次插入10000条数据,循环查找插入,然后在备用表中删除掉这次插入的数据,继续查10000条插入,这样做迁移。这个存储过程该怎么写?
最佳答案
- 五星知识达人网友:鱼忧
- 2021-01-27 06:48
如果不是常规地做这种操作,就不要编制程序直接手动执行命令更方便一些。不知道你的数据量有多大,不大于500万条记录应该完全可以做到的。当然要采取一些手段。
例如:按记录的年度或者地区进行分段插入记录,并分段执行commit。删除备用表如果记录多的话需要相当长的时间。想快速删除的话,先确认的内容准确无误后,可采用truncate table语句,瞬间删除记录,但不给你rollback的机会,千万小心。
如果一定要编程,关键是如何进行分段。参考程序如下:
create or replace procedure Pro_Delete(P_str in varchar2) is
begin
insert into 目标表 select * from 备用表 where 列=P_str;
delete from 备用表 where 列=P_str;
commit;
end Pro_Delete;
调用:
begin
Pro_Delete(分段用参数1);
Pro_Delete(分段用参数2);
Pro_Delete(分段用参数3);
... ...
end;
例如:按记录的年度或者地区进行分段插入记录,并分段执行commit。删除备用表如果记录多的话需要相当长的时间。想快速删除的话,先确认的内容准确无误后,可采用truncate table语句,瞬间删除记录,但不给你rollback的机会,千万小心。
如果一定要编程,关键是如何进行分段。参考程序如下:
create or replace procedure Pro_Delete(P_str in varchar2) is
begin
insert into 目标表 select * from 备用表 where 列=P_str;
delete from 备用表 where 列=P_str;
commit;
end Pro_Delete;
调用:
begin
Pro_Delete(分段用参数1);
Pro_Delete(分段用参数2);
Pro_Delete(分段用参数3);
... ...
end;
全部回答
- 1楼网友:有你哪都是故乡
- 2021-01-27 07:02
insert into tonglu.tb_putoutconfirm(transfer_type,package_num,handledby,username,tms_service_code,batch,weight)values(?,?,?,?,?,tonglu.batch_seq.nextval,?);
按位置对应一下,batch在段在倒数第二位,所以那个地方直接引用序列
其他你该怎么传参数还怎么传参数
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯