前段时间生产出问题,,有些数据丢失了,,这边经理让我把丢失数据 补全,然后我就写了个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万条数据,数据都是正常的,所以,不用担心明天上线的内容会有问题了,啦啦啦~