我有以下pl / sql程序:
create or replace procedure processData (a_date Date, r_offset Number, r_limit Number) as
begin
for r in (select * from (select a.*, ROWNUM rnum from (select* from TABLE1 T1 where T1.date=a_date) a
where rownum <= r_limit) where rnum >= r_offset) loop
if (/*some condition on column values */) then
/* insert into A*/
else
/*insert into B*/
end if;
end loop;
end;
正如你所看到的那样。
我现在想知道用for-all语句执行此操作:这将涉及在表变量内部收集数据,然后在填充这些变量之后,执行2个forall语句:一个用于表A,一个用于表B.
这会大大改善我的节目表现吗?
编辑: 我只是注意到这个程序一般来说非常慢!我尝试处理10k记录,差不多花了30秒!一般问题在哪里?
答案 0 :(得分:1)
为什么不使用纯SQL - conditional insert
:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9014.htm
我敢打赌它会比任何PL / SQL循环快至少100倍,甚至是FORALL。
INSERT FIRST
WHEN /*some condition on column values */
THEN INTO /* insert into A */
ELSE INTO /*insert into B*/
select * from (select a.*, ROWNUM rnum from (select* from TABLE1 T1 where T1.date=a_date) a
where rownum <= r_limit) where rnum >= r_offset