在 Oracle 中并行插入

Insert in parallel in Oracle

我有一个带有 SQL 插入语句的 table。

rules_table
---------------------------------------
| rule_id | rule           | run_rule |
---------------------------------------
| 01      | INSERT INTO... | yes      |
---------------------------------------
| 02      | INSERT INTO... | no       |
---------------------------------------
| 03      | INSERT INTO... | yes      |
---------------------------------------

每个插入语句大约需要 2-3 分钟才能完成并且有几百个,每个插入都采用以下形式:

INSERT INTO some_table
(column1, column2, ... column_n )
SELECT expression1, expression2, ... expression_n
FROM source_table
WHERE conditions;

有什么方法可以 运行 并行插入语句?

经过评论 here and here 的所有讨论,并且您无法更改当前设计,我建议并行执行它们的唯一方法是使用 DBMS_SCHEDULER

例如,

BEGIN
    DBMS_SCHEDULER.RUN_JOB('pkg1.proc1', false);
    DBMS_SCHEDULER.RUN_JOB('pkg2.proc2', false);
    DBMS_SCHEDULER.RUN_JOB('pkg3.proc3', false);
END;
/

因此,您可以在相应的 程序 中拥有所需的 插入语句

您需要使用 EXECUTE IMMEDIATE 来执行过程中的 INSERT 语句。当你执行上面的PL/SQL块时,它会运行所有并行的过程。将 rule_id 作为 IN 参数发送到过程,基于 rule_id 您可以调用 EXECUTE IMMEDIATE 到 运行 所需的插入语句。