当前位置: 首页 > news >正文

[SAP ABAP] 锁对象

在SAP中使用锁对象,用于避免在数据库中插入或更改数据时出现不一致的情况

1.创建锁对象

数据准备

学校表(ZDBT_SCH_437)

使用事务码SE11创建锁对象

点击"锁对象"单选按钮,输入以E开头的锁定对象的名称,然后点击创建按钮

锁对象名称一定要以E开头,后面追加Z或Y,再追加其他内容,名称长度不能超过16

输入简短描述,点击表选项卡,在名称字段中输入表名称,并选择锁模式

锁模式

点击锁参数选项卡,将出现以下屏幕

在锁参数标签页,默认显示表的主键,这些参数最终构成函数的参数
保存并激活后则自动生成以下2个函数,当锁对象删除时这2个函数也会一起删除

提示Tips
在SE11界面中,通过菜单 【转到】|【锁模块】可以查看到函数名

锁对象激活后,会在系统中自动产生2个函数,分别用于表对象的锁定以及表对象的释放
① 创建锁定的函数的命名规则为:ENQUEUE_+ 锁对象名
② 释放锁定的函数的命名规则为:DEQUEUE_+ 锁对象名

2.在程序中使用锁对象

加锁解锁测试
加锁期间,事务码 SM12可以对锁对象进行查看和删除
编写一段代码,对学校表(ZDBT_SCH_437)加锁,一分钟后释放:
REPORT z437_test_2024.CALL FUNCTION 'ENQUEUE_EZ_SCH_437'EXPORTINGmode_zdbt_sch_437  = 'E'mandt              = sy-mandt_scope             = '2'EXCEPTIONSforeign_lock   = 1system_failure = 2OTHERS         = 3.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.WRITE / 'Table ZDBT_SCH_437 Was Locked.'.WAIT UP TO 60 SECONDS.CALL FUNCTION 'DEQUEUE_EZ_SCH_437'EXPORTINGmode_zdbt_sch_437 = 'E'mandt      = sy-mandt.WRITE / 'Table ZDBT_SCH_437 Was Unlocked.'.
ENDIF.

运行期间,SM12查看锁对象:

程序运行结束后 ,刷新SM12 ,可以看到锁已经释放

编写一段代码对学校表(ZDBT_SCH_437)进行修改

REPORT z437_test_2024.DATA: gt_school TYPE STANDARD TABLE OF zdbt_sch_437 WITH HEADER LINE.SELECT * FROM zdbt_sch_437 INTO TABLE gt_school.CALL FUNCTION 'ENQUEUE_EZ_SCH_437'EXPORTINGmode_zdbt_sch_437  = 'E'mandt              = sy-mandt_scope             = '2'EXCEPTIONSforeign_lock   = 1system_failure = 2OTHERS         = 3.IF sy-subrc IS INITIAL.MODIFY zdbt_sch_437 FROM TABLE gt_school.CALL FUNCTION 'DEQUEUE_EZ_SCH_437'EXPORTINGmode_zdbt_sch_437 = 'E'mandt      = sy-mandt.WRITE / 'Data Was Saved Successfully'.ELSE.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

上锁的一般步骤

先上锁,上锁成功之后,从数据库取数据,然后更改数据,接着更新到数据库,最后解锁

按照这个步骤,才能保证更改完全运行在锁的保护机制下

http://www.lryc.cn/news/448922.html

相关文章:

  • Docker快速部署RabbitMq教程
  • 解决银河麒麟V10中/data目录执行权限问题
  • 画两个数的平方和的曲线
  • 问:进程/线程上下文切换场景及相关概念?
  • 神经网络(一):神经网络入门
  • 卸载apt-get 安装的PostgreSQL版本
  • 低代码用户中心:构建高效便捷的用户管理平台
  • 3款免费的GPT类工具
  • Mixture-of-Experts (MoE): 条件计算的诞生与崛起【上篇】
  • 【算法】分治:归并排序之LCR 170.交易逆序对的总数(hard)
  • 2024.9.28 作业+思维导图
  • 树莓派外挂Camera(基操)(TODO)
  • 讯飞星火编排创建智能体学习(二)决策节点
  • YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU
  • 力扣 简单 112.路径总和
  • OpenMV与STM32通信全面指南
  • Python库matplotlib之二
  • DAY17||654.最大二叉树 |617.合并二叉树 |700.二叉搜索树中的搜索 |
  • 读构建可扩展分布式系统:方法与实践16读后总结与感想兼导读
  • Anaconda 安装
  • 优雅使用 MapStruct 进行类复制
  • 第19周JavaWeb编程实战-MyBatis实现OA系统 1-OA系统
  • 仿黑神话悟空跑动-脚下波纹特效(键盘wasd控制走动)
  • `torch.utils.data`模块
  • 深入理解 `strncat()` 函数:安全拼接字符串
  • OpenCV_自定义线性滤波(filter2D)应用详解
  • 设计模式之装饰模式(Decorator)
  • 大数据-146 Apache Kudu 安装运行 Dockerfile 模拟集群 启动测试
  • React入门准备
  • robomimic基础教程(四)——开源数据集