Oracle插入过程仅插入1行而不是批量插入

问题描述 投票:0回答:1

我正在尝试从表中获取最大日期变量,然后使用该变量将大于最大日期变量的记录插入到另一个表中。我已经创建了该过程并对其进行了测试,但是每次通过dbms_scheduler作为计划作业运行该过程时,它仅插入1条记录,以每30分钟运行一次。我的测试用例允许第一次运行插入6行,在第一个作业运行之后,它仅插入6条记录中的1条记录。然后下一次运行插入1条记录...等等。我正在测试这一概念,最终将其作为计划的作业每30分钟插入几千行。快速运行此类过程并批量插入行的最有效方法是什么。我正在考虑将表更改为nologging并删除任何索引,并在插入后重建它们。最好的方法是什么,请先谢谢您。

这是我的代码:

create or replace procedure update_cars
AS
v_date date;
begin
execute immediate 'alter session set NLS_DATE_FORMAT='DD-MON-YY HH24:MI:SS'';
select max(inventory_date) into v_date from car_equipment;
insert /*+APPEND*/ into car_equipment(count_cars,equipment_type,location,inventory_date,count_inventory) 
select count_cars,equipment_type,location,inventory_date,count_inventory 
from car_source where inventory_date > v_date;
end;
oracle insert append procedure
1个回答
0
投票

您为什么要更改会话?您希望从中获得什么好处?

您编写的代码可以“简化”为

create or replace procedure update_cars
as 
begin
  insert into car_equipment (count_cars,, equipment_type, ...)
    select s.count_cars, s.equipment_type, ...
    from car_source s
    where inventory_date > (select max(e.inventory_date) from car_equipment e);
end;

如果代码仅插入一行,则检查car_equipmentcar_source表中的日期值。如果没有样本数据,我会说代码一切正常(至少,对我来说看起来不错)。

如果您每30分钟插入几千行,那应该不会有问题,因为Oracle能够处理轻松地

© www.soinside.com 2019 - 2024. All rights reserved.