我正在研究 Oracle 10gR2。
这是我的问题 -
我有一个程序,我们称之为 *proc_parent* (在包内)应该调用另一个过程,我们称之为 *用户创建* .我要打电话 *用户创建* 在一个循环中,它从表中读取一些列 - 这些列值作为参数传递给 *用户创建* 程序。
代码是这样的:
FOR i IN (SELECT community_id,
password,
username
FROM customer
WHERE community_id IS NOT NULL
AND created_by = 'SRC_GLOB'
)
LOOP
user_creation (i.community_id,i.password,i.username);
END LOOP;
COMMIT;
user_Creation 过程正在为某些业务逻辑调用 Web 服务,然后根据响应更新表。
我需要找到一种可以在这里使用多线程的方法,以便我可以运行此过程的多个实例来加快速度。我知道我可以使用 *DBMS_SCHEDULER* 可能 *DBMS_ALERT* 但我无法弄清楚如何在循环中使用它们。
有人可以指导我朝着正确的方向前进吗?
谢谢,
安库尔
最佳答案
您可以做的是同时提交大量作业。见 Example 28-2 Creating a Set of Lightweight Jobs in a Single Transaction
这会在 pl/sql 表中填充您要在一个 tx 中同时提交的所有作业。一旦它们被提交(启用),它们就会开始运行,数量是系统可以处理的,或者是资源管理器计划允许的数量。
轻量级作业的开销非常......最小/轻。
关于multithreading - 在 Oracle 过程中实现多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8213415/