数据处理流程:
1、先将数据导入的临时表terminal_sell_temp 。
2、更新业务基础表,有两个表MV_AREA_TID_LOTTERY_DAY,MV_AREA_TID_LOTTERY_TERM 。这两个表的记录总数是3千万
3、更新其它业务基础表,有37个。使用oracle job来更新,执行的入口函数代码如下:
update terminal_sell_temp set STATUS=1;
--处理基础视图
Proc_MV_AREA_TID_LOTTERY_DAY();
Proc_MV_AREA_TID_LOTTERY_TERM();
--按时间段处理视图
proc_day();
proc_term();
proc_week();
proc_month();
proc_quarter();
proc_year();更新业务表的代码如下:
for idx in( select distinct sell_end_time from terminal_sell_temp where STATUS=1) loop
--处理mv_area_tid_day
begin
execute immediate ' delete mv_area_tid_day where sell_day='''||to_char(idx.sell_end_time,'yyyy-mm-dd')||'''' ; --删除当日数据,从新更新
execute immediate ' insert into mv_area_tid_day '||
' select sum(sell_amount) sell_amount,sum(sell_count) sell_count, '||
' round(decode(sum(sell_count), 0, 0, sum(sell_amount) / sum(sell_count)), 2) ticket_sell, '||
' area_id, area_name,sell_id, sell_day from mv_area_tid_lottery_day where sell_day='''||to_char(idx.sell_end_time,'yyyy-mm-dd')||''''||
' group by sell_id,sell_day,area_id,area_name '; mvlog.note:='更新mv_area_tid_day表的数据完成';
mvlog.datetime:=sysdate;
mvlog.procname:='pkg_procimportdata.proc_day';
write_mvlog(mvlog); --添加日志
exception
when others then
begin
dbms_output.put_line(sqlerrm);
mvlog.note:='更新mv_area_tid_day表的数据时出错'||sqlerrm;
mvlog.datetime:=sysdate;
mvlog.procname:='pkg_procimportdata.proc_day';
write_mvlog(mvlog); --添加日志
end;
end;
end loop;请问我该怎么优化...
1、先将数据导入的临时表terminal_sell_temp 。
2、更新业务基础表,有两个表MV_AREA_TID_LOTTERY_DAY,MV_AREA_TID_LOTTERY_TERM 。这两个表的记录总数是3千万
3、更新其它业务基础表,有37个。使用oracle job来更新,执行的入口函数代码如下:
update terminal_sell_temp set STATUS=1;
--处理基础视图
Proc_MV_AREA_TID_LOTTERY_DAY();
Proc_MV_AREA_TID_LOTTERY_TERM();
--按时间段处理视图
proc_day();
proc_term();
proc_week();
proc_month();
proc_quarter();
proc_year();更新业务表的代码如下:
for idx in( select distinct sell_end_time from terminal_sell_temp where STATUS=1) loop
--处理mv_area_tid_day
begin
execute immediate ' delete mv_area_tid_day where sell_day='''||to_char(idx.sell_end_time,'yyyy-mm-dd')||'''' ; --删除当日数据,从新更新
execute immediate ' insert into mv_area_tid_day '||
' select sum(sell_amount) sell_amount,sum(sell_count) sell_count, '||
' round(decode(sum(sell_count), 0, 0, sum(sell_amount) / sum(sell_count)), 2) ticket_sell, '||
' area_id, area_name,sell_id, sell_day from mv_area_tid_lottery_day where sell_day='''||to_char(idx.sell_end_time,'yyyy-mm-dd')||''''||
' group by sell_id,sell_day,area_id,area_name '; mvlog.note:='更新mv_area_tid_day表的数据完成';
mvlog.datetime:=sysdate;
mvlog.procname:='pkg_procimportdata.proc_day';
write_mvlog(mvlog); --添加日志
exception
when others then
begin
dbms_output.put_line(sqlerrm);
mvlog.note:='更新mv_area_tid_day表的数据时出错'||sqlerrm;
mvlog.datetime:=sysdate;
mvlog.procname:='pkg_procimportdata.proc_day';
write_mvlog(mvlog); --添加日志
end;
end;
end loop;请问我该怎么优化...
当然,在IF ... ELSE里,有些语句也可能不执行。
你把ORACLE想的太不负责任了。。
execute immediate sql2;
这样一个代码段,oracle是先执行完sql1再执行sql2?确认不?