关于 SAP ABAP Enqueue Function Module 的输入参数 _wait

简介: 关于 SAP ABAP Enqueue Function Module 的输入参数 _wait

我们查看 ABAP 系统根据 Lock Object 自动生成的 Enqueue Function Module,可以发现它有一个名叫 _wait 的输入参数,默认值为 space

7e349cc987ee9d63d7c5e59d91aa4b4b.png

该参数决定了发生锁冲突时的锁行为。

开发人员有以下选择:

  • 初始值:

如果由于存在竞争锁而导致锁定尝试失败,则会触发异常 FOREIGN_LOCK。

  • X:

如果由于存在竞争锁而导致锁定尝试失败,系统会在一定时间后重复锁定尝试。 仅当自第一次锁定尝试以来已经过了一定的时间限制时,才会触发 FOREIGN_LOCK 异常。 等待时间和时间限制由配置文件参数定义。


这里我们可以用一个例子来说明 _WAIT 参数的作用。


假设我们在一个物料管理系统中,用户 A 想要更改物料 M 的价格,同时用户 B 也想要更改物料 M 的价格。物料 M 的价格在数据库中是一个记录,我们使用 Lock Object 来保护这个记录。


如果用户 A 先执行了 Enqueue Function Module,设定了锁,并且还没有执行对应的 Dequeue Function Module 来释放锁。这时候,用户 B 也尝试执行 Enqueue Function Module 来设定锁。


  1. 如果 _WAIT 参数设置为 ‘X’,那么用户 B 的请求不会立即失败,而是会等待用户 A 释放锁。这样可以保证用户 B 的请求最终会成功,但可能需要等待一段时间。
  2. 如果 _WAIT 参数没有设置(或设置为 ’ '),那么用户 B 的请求会立即失败,返回一个错误信息,告知用户 B 物料 M 的价格当前正在被其他用户更改。


通过这个例子,我们可以看出 _WAIT 参数的重要性。它允许我们根据具体情况选择是否等待锁变为可用。在一些情况下,我们可能希望立即知道操作是否成功,而不愿意等待。在其他情况下,我们可能希望尽可能地完成操作,即使需要等待一段时间。


需要注意的是,虽然 _WAIT 参数可以让我们选择是否等待,但它并不能解决所有的并发问题。例如,如果两个用户同时更改同一条记录,即使我们使用了 _WAIT 参数,也无法保证两个用户的更改都能被成功应用。这种情况下,我们需要使用其他的并发控制手段来避免死锁。

相关文章
|
27天前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
20 0
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
|
2月前
|
数据库
如何通过增强(Enhancement)的方式,给 ABAP Function Module 增添新的功能试读版
如何通过增强(Enhancement)的方式,给 ABAP Function Module 增添新的功能试读版
26 0
|
26天前
|
数据库
什么是 SAP ABAP 的 Dialog Module
什么是 SAP ABAP 的 Dialog Module
15 0
什么是 SAP ABAP 的 Dialog Module
|
27天前
|
SQL 数据库 数据处理
什么是 ABAP SQL Function
什么是 ABAP SQL Function
10 0
什么是 ABAP SQL Function
|
1月前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示试读版
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示试读版
15 0
|
3月前
|
数据库
SAP ABAP 更新函数(Update Function Module)执行出错的原因分析试读版
SAP ABAP 更新函数(Update Function Module)执行出错的原因分析试读版
35 0
|
28天前
|
资源调度 Serverless 计算机视觉
高斯函数 Gaussian Function
**高斯函数,或称正态分布,以数学家高斯命名,具有钟形曲线特征。关键参数包括期望值μ(决定分布中心)和标准差σ(影响分布的宽度)。当μ=0且σ²=1时,分布为标准正态分布。高斯函数广泛应用于统计学、信号处理和图像处理,如高斯滤波器用于图像模糊。其概率密度函数为e^(-x²/2σ²),积分结果为误差函数。在编程中,高斯函数常用于创建二维权重矩阵进行图像的加权平均,实现模糊效果。
18 1
|
1月前
|
算法 Serverless C语言
CMake函数和宏(function和macro):使用函数和宏提高代码可读性
CMake函数和宏(function和macro):使用函数和宏提高代码可读性
33 1
|
1月前
|
存储 安全 编译器
【C++ 包装器类 std::function 和 函数适配器 std::bind】 C++11 全面的std::function和std::bind的入门使用教程
【C++ 包装器类 std::function 和 函数适配器 std::bind】 C++11 全面的std::function和std::bind的入门使用教程
33 0
|
1月前
|
SQL Oracle 关系型数据库
Flink的表值函数(Table-Valued Function,TVF)是一种返回值是一张表的函数
【2月更文挑战第17天】Flink的表值函数(Table-Valued Function,TVF)是一种返回值是一张表的函数
21 1