gpt4 book ai didi

oracle - 如何在 pl/sql 中同时在不同 session 中执行存储过程

转载 作者:行者123 更新时间:2023-12-01 23:30:47 26 4
gpt4 key购买 nike

PL/SQL 是否有可能同时调用多个 session 并在多个 session 中运行一个过程。

我想在有 250 个用户登录应用程序的实时应用程序中使用它。用户通过客户端工具连接到 Oracle。 (Power Builder 是前端工具)

例如,如果用户调用存储过程,则该存储过程必须使用不同的参数值运行 10 次。
我不想在同一 session 中依次运行 10 次,因为这可能需要很长时间。
我正在寻找一种可以同时在 10 个不同 session 中运行存储过程的方法。

我考虑过使用 DBMS_JOB.SUBMIT 放置 10 个作业,但是因为繁重的作业负载(250 个用户 * 10 = 2500 个作业可能会同时在作业调度程序中安排等等)我们的 DBA 小组正在寻找其他更好的方法。

最佳答案

为了避免发布多个 Oracle 职位,您可以尝试使用 William Robertson Parallel PL/SQL launcher

if you create a table "PQ_DRIVER" with 4 partitions and a parallel degree of 4, with one row in each partition, and you execute a query along the lines of "SELECT /*+ PARALLEL(pq,4) */ thread_id FROM pq_driver pq", that should persuade the PQ controller to set four PQ slave processes to work on it (one per partition). And if you pass that query as a cursor parameter to a parallel-enabled pipelined function, then shouldn't that create a situation where each each row is processed by a separate PQ slave process? So here is a way to use (alright, hack) the PQ engine so that it processes arbitrary PL/SQL procedure calls in parallel.

想法是使用 PARALLEL_ENABLEPIPELINED 功能创建一个函数:

   function pq_submit
( p_job_list varchar2_tt
, p_pq_refcur rc_pq_driver )
return varchar2_tt
parallel_enable(partition p_pq_refcur by any)
pipelined
is
...
loop
execute_command(your_proc);
end loop;

函数 execute_command 使用 autonomous_transaction

看起来像这样:

procedure execute_command
( p_what log_times.what%type )
is
pragma autonomous_transaction;
begin
execute immediate p_what;
commit;
end execute_command;

关于oracle - 如何在 pl/sql 中同时在不同 session 中执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37178451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com