【问题标题】:Oracle insert procedure inserts only 1 row instead of bulkOracle 插入过程仅插入 1 行而不是批量插入
【发布时间】:2020-02-02 03:53:41
【问题描述】:

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

这是我的代码:

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】:

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

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

    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 能够轻松处理

    【讨论】:

    • 谢谢 Littlefoot,我从没想过要检查日期。我认为这个测试数据库使用 NLS_DATE_FORMAT 作为 'DD-MON-YY',我正在更改日期以确保数据更新时间缩短到一秒。我还应该添加一个提交吗?结束前; ??
    • 不客气。日期格式无关紧要。无论如何,Oracle 将 DATE 数据类型值存储到几秒钟;它是显示时间或不显示时间的表示层,所以 - 你不需要这样的 ALTER SESSION。从 COMMIT 开始:因为该过程将通过调度程序调用,所以是的 - 包括它。否则,您应该将该决定留给过程调用者。
    • 再次感谢 Littlefoot,我将使用提交运行它并安排另一个作业以“按原样”日期进行测试,并在 where 子句中包含最大日期。感谢您解决了一个我无法解决的麻烦问题。这个论坛非常适合向像您这样的专家提出想法! :-)
    • 快速提问,如果数据类型是时间戳怎么办?这会影响结果吗?
    • 否;它的行为与 DATE 相同,但具有更高的精度,最高可达小数秒。我写的查询也一样。
    猜你喜欢
    • 2019-11-05
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多