ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
查看: 763|回复: 5

[PL/SQL] 如何实现存储过程多线程执行

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2017-11-27 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
存储过程中会循环遍历一个标准表,通过提取标准表中的sql进行数据抽取并将符合条件的数据添加到另一个表中。标准表中有1000+条数据规则sql是期中的字段。
大致流程是
begin
  for a in select * from 标准表
    line:=a.sql;   --(sql内容是from XXX where XXX)
    line:='insert into table select 1,2,3,4,5 ' || line;
    EXECUTE IMMEDIATE (line);
end
目前我知道可以用/*+parallel(a,16)*/来进行DML并行,但是我想做这个存储过程的多线程该怎么做?
我百度了大多存储过程并发执行需要用job实现但是看的云里雾里,希望大佬们帮帮忙...
认证徽章
论坛徽章:
15
ERP板块每日发贴之星
日期:2007-08-24 01:03:56狮子座
日期:2015-09-10 09:07:23处女座
日期:2015-09-11 10:28:03ITPUB14周年纪念章
日期:2015-10-26 17:23:44喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49蛋疼蛋
日期:2013-04-27 10:34:16
2#
发表于 2017-11-27 13:44 | 只看该作者
本帖最后由 test_100 于 2017-11-27 13:46 编辑
  1.     l_task      := 'XX_000004';
  2.     l_chunk_sql := ' select t.cst_id,t.cst_id from aa_xx_t t ';
  3.     l_sql       := 'Begin proce_name_pck.pro_mut(:start_id,:end_id); End;';
  4.     dbms_output.put_line(l_sql);
  5.     dbms_parallel_execute.create_task(task_name => l_task);
  6.     dbms_parallel_execute.create_chunks_by_sql(l_task, l_chunk_sql, False);
  7.   
  8.     dbms_parallel_execute.run_task(l_task,
  9.                                    l_sql,
  10.                                    dbms_sql.native,
  11.                                    parallel_level  => 16,
  12.                                    job_class       => Null);
  13.     dbms_parallel_execute.drop_task(l_task);
复制代码

使用道具 举报

回复
论坛徽章:
480
榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09
3#
发表于 2017-11-27 22:50 | 只看该作者
楼上那个包是专门给UPDATE用的,并不适用楼主的需求。
把每个子任务单独创建一个JOB,就相当于打开一个窗口去执行了一个INSERT,同时打开许多个窗口。有什么看不懂的?

使用道具 举报

回复
认证徽章
论坛徽章:
15
ERP板块每日发贴之星
日期:2007-08-24 01:03:56狮子座
日期:2015-09-10 09:07:23处女座
日期:2015-09-11 10:28:03ITPUB14周年纪念章
日期:2015-10-26 17:23:44喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49蛋疼蛋
日期:2013-04-27 10:34:16
4#
发表于 2017-11-28 17:12 | 只看该作者
newkid 发表于 2017-11-27 22:50
楼上那个包是专门给UPDATE用的,并不适用楼主的需求。
把每个子任务单独创建一个JOB,就相当于打开一个窗 ...

把要insert table的数据分多个线程insert的,这样不可以?

使用道具 举报

回复
论坛徽章:
480
榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09
5#
发表于 2017-11-28 22:29 | 只看该作者
test_100 发表于 2017-11-28 17:12
把要insert table的数据分多个线程insert的,这样不可以?

这里有篇文章提到了并行INSERT, 但是要求目标表是分区的:

使用道具 举报

回复
认证徽章
论坛徽章:
15
ERP板块每日发贴之星
日期:2007-08-24 01:03:56狮子座
日期:2015-09-10 09:07:23处女座
日期:2015-09-11 10:28:03ITPUB14周年纪念章
日期:2015-10-26 17:23:44喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49蛋疼蛋
日期:2013-04-27 10:34:16
6#
发表于 2017-11-29 09:39 | 只看该作者
newkid 发表于 2017-11-28 22:29
这里有篇文章提到了并行INSERT, 但是要求目标表是分区的:
https://blogs.oracle.com/warehousebuilder/ ...

谢谢~

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 |
  | | |
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表