暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle PLSQL中的多线程

askTom 2018-07-07
1014

问题描述

团队,

在当前项目中,出于多线程目的,在Java层中调用了批处理过程之一。作为当前要求,我们需要在PLSQL层而不是Java层中调用相同的存储过程。我们尝试使用DBMS_JOB方法来实现,但是它的效率不如Java层。

我们是否有任何方法可以在线程中运行存储过程。请解释 ..

专家解答

查看DBMS_PARALLEL_EXECUTE。

但是我要检查的第一件事是-Java经常使用多线程,因为逐行进行处理。如果您可以通过SQL将其更改为基于设置的操作,则通常根本不需要多线程的复杂性。

这里有一个微不足道的演示 .... 我们从一个例程开始 “修复” 行值,我们需要调用它1000000次,这样我们就能很快想到多线程解决方案,而只是一个更新就可以了。

SQL> create table t as select rownum pk, d.* from dba_objects d,
  2   ( select 1 from dual connect by level <= 20 );

Table created.

SQL>
SQL> create index ix on t ( pk );

Index created.

SQL>
SQL>
SQL> create or replace
  2  procedure fix_row(p_idx int, p_new_val varchar2) is
  3  begin
  4    update t
  5    set    owner = p_new_val
  6    where  pk = p_idx;
  7  end;
  8  /

Procedure created.

SQL>
SQL> set timing on
SQL> begin
  2  for i in 1 .. 1000000
  3  loop
  4    fix_row(i,upper(i));
  5  end loop;
  6  end;
  7  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:36.10
SQL>
SQL> update t
  2  set    owner = upper(pk)
  3  where  pk <= 1000000;

1000000 rows updated.

Elapsed: 00:00:02.52
SQL>
SQL>


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论