sql - 在oracle数据库中同时运行相关或相同的程序,互不干扰
问题描述
我有一个用于创建在 oracle 数据库中运行过程的特殊报告的软件,但问题是:当我们创建一个报告时,它使用一些过程并截断并填充一些表,如果我们同时创建另一个报告,它会导致错误,因为它需要用另一个过程截断的我的表信息。所以我正在寻找一种技术或查询来处理这个问题,并在第一个报告完成它在用户没有注意到任何事情的状态下使用的所有过程之后创建第二个报告。在这种情况下,第二个报告的创建时间比第一个报告的时间长。
解决方案
您可以使用DBMS_LOCK.ALLOCATE_UNIQUE
包来同步您的应用程序并强制执行顺序处理。
DECLARE
l_status number;
l_lock_handle varchar2(128);
l_lock_request integer;
BEGIN
DBMS_LOCK.ALLOCATE_UNIQUE ( lockname => 'NAME_OF_YOUR_LOCK', lockhandle => l_lock_handle);
l_status := DBMS_LOCK.REQUEST(lockhandle => l_lock_handle, timeout => 15);
if (l_status = 0) then
-- Plase your code here
-- Only one thread can work here
l_lock_request := DBMS_LOCK.release(l_lock_handle);
else
-- handle other lock statuses...
end if;
END;
您可以在此处阅读有关 DBMS_LOCK的更多信息。
推荐阅读
- string - 关于字符串索引字符的问题
- mo-cap - 关于 .bvh 文件的一些问题
- pine-script - Pine-script 如何获得交叉点的 y 坐标
- java - 这在 RestAssured 中是已知的吗?第一个数据集查询参数在端点的第二个触发器实例中连接
- discord - 我的不和谐机器人在命令 discord.js 后不断发送消息
- spring - Springboot 无法读取 Yaml 配置
- url - 我是否需要转义 URL 查询字符串中的正斜杠?
- java - BitmapFactory.decodeResource 的问题
- java - 不存在这样的用户(Firebase orderByChild equalTo)
- java - 如何将ColorFilter设置为png图像