【发布时间】:2015-04-25 05:49:34
【问题描述】:
在 plsql 中,我想将大约 100 万行从临时表插入到实际表中,目前我正在为此使用游标 for 循环。 但是我知道有一种方法可以通过对所有命令使用批量插入来加快这一速度,但我在消除重复部分中苦苦挣扎。你能帮忙把下面的代码转换成批量收集吗
DECLARE
CURSOR c1 is
select
ps_item_code,
item_code,
cons_date,
shop_code,
dept_code,
class_code,
sub_class_code,
supl_code,
plu_price,
sal_qty,
sal_val_in_lc,
disc_val_in_lc,
tax_val_in_lc,
odept, oclass, osubclass
from
sales_stage;
BEGIN
FOR i in c1 loop
BEGIN
my_cnt := 0;
select count(1) into my_cnt from hps_ps_terr_sales_1415
where item_code=i.item_code and cons_date=i.cons_date and shop_code=i.shop_code and sal_qty=i.sal_qty and supl_code=i.supl_code;
IF my_cnt = 0 THEN
BEGIN
insert into sales_actual
(
ps_item_code,
item_code,
cons_date,
shop_code,
dept_code,
class_code,
sub_class_code,
supl_code,
plu_price,
sal_qty,
sal_val_in_lc,
disc_val_in_lc,
tax_val_in_lc, odept, oclass, osubclass,
dept, class, subclass
)
values
(
i.terr_code,
i.ps_item_code,
i.item_code,
i.cons_date,
i.shop_code,
i.dept_code,
i.class_code,
i.sub_class_code,
i.supl_code,
i.plu_price,
i.sal_qty,
i.sal_val_in_lc,
i.disc_val_in_lc,
i.tax_val_in_lc, i.odept, i.oclass, i.osubclass,
i.dept_code,
i.class_code,
i.sub_class_code
);
END;
END IF;
END;
END LOOP;
COMMIT;
END;
【问题讨论】: