在 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
到 运行 所需的插入语句。
我有一个带有 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 herDBMS_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
到 运行 所需的插入语句。