前段时间生产出问题,,有些数据丢失了,,这边经理让我把丢失数据 补全,然后我就写了个plsql语句块,在本地测试过数据也可以正常插入,,但是生产上面可能数据量比较大,应该有10万条左右,,有点怕会不会因为数据量过大导致PLSQL语句块插入数据有问题。这边,我也贴出这个plsql语句块
declare table_name number :=20180501; act_code varchar2(20) :='''R%'''; str_sql varchar2(8000); s number :=1; begin loop table_name:=table_name+1; dbms_output.put_line('循环了第'||s||'次,'||'表名为'||table_name); s :=s+1; str_sql :=' insert into QYPT_MARKET_DETAIL_INFO ( FORM_TIME, MARKET_NO, CHANNEL_NO, APP_NO, FORM_ID, CARD, BANK_CODE, PHONE, GOOD_TYPE, GOOD_NO, FORM_PRICE, FORM_QUANTITY, FORM_TYPE, RETURN_PRICE, RETURN_QUANTITY ) select A.FORM_TIME, B.ACTCODE, A.CHANNEL_NO, A.APP_NO, A.FORM_ID, A.ACCOUNT, A.BANK_NO, A.REGISTER_PHONE, B.GOOD_TYPE, B.GOOD_ID, B.BUYPRICE, B.BUYNUM, 0, 0, 0 from qypt_pay_history_' || to_char(table_name) || ' a, (select count(*) as buyNum, sum(t.actually_price) as buyPrice, t.good_type, t.good_id, t.form_id, t.actcode from qypt_pay_history_sub_' || to_char(table_name) || ' t where t.pay_status = 1 and t.stock_status = 1 and t.splie_mode = 3 and t.actcode like '|| act_code ||' and length(trim(t.actcode)) = 10 group by t.good_type, t.good_id, t.form_id, t.actcode) b where to_char(a.id) = b.form_id and a.PAY_STATUS = 1 and a.status = 1 and a.splie_mode = 3 order by a.id asc'; execute immediate str_sql; EXIT WHEN table_name =20180503; END LOOP; end;
带着这个问题,我做了一个测试
创建测试用的表
创建要迁移数据的表
插入对应的数据,这边插入数据,我就不多贴代码了,就只要改下表名以及对应的字段就行了,A_1,A_2,B_1,B_2等
将数据从A_1,A_2,B_1,B_2中插入到A_B表中
查询A_1表数据,可以看出,我这边以及插入9999条数据了,这边你想插多少条数据loop循环多少次就行了
查询B_1表
查询数据迁移到A_B的表中后的数据,
可以看出迁移的数据有10万条数据,数据都是正常的,所以,不用担心明天上线的内容会有问题了,啦啦啦~