ABAP学习——锁对象

一、创建锁对象

1.在事务码se11中输入锁对象名称,点击创建按钮。锁对象名字一定要以E开头,后面追加Z或Y,再追加其他内容,名字长度不能超过16。

在这里插入图片描述

2.输入对象描述便于查找,勾选RFC选项,则可其他系统调用。

在这里插入图片描述

3.在表格标签页输入表名称和锁模式,若要关联其他表可点击添加,填写其他表名称和锁模式。

  • E-独占锁:只允许一个用户访问表,对其他程序的独占锁及共享锁不起作用。
  • S-共享锁:多个用户可以同时读取数据,但是,若有个用户在修改数据,则其他用户就无法再访问数据,此外对其他用户使用的共享锁起作用,但是对独占锁是不起作用的。
  • X-独占锁但不是累计锁:独占锁可以再多个不同的事务码内申请锁。但是在相应事务码中只能申请一次,此外不接收其他任何锁申请。

在这里插入图片描述

4.在锁参数标签页,默认显示表的主键,这些参数最终构成函数的参数。

在这里插入图片描述

5.保存激活后则自动生成以下两个函数,当锁对象删除时这两函数也会一起删除。

  • ENQUEUE_ETRAIN01
  • DEQUEUE_ETRAIN01
5.1函数参数
  1. 表字段
  2. _WAIT
    功能:控制当锁尝试由于冲突锁而失败时的行为。如果设置为’X’或特定的等待时间,系统会在一定时间后重试锁定操作,而不是立即返回失败。
    定义:该参数决定了锁冲突时的行为,是否等待锁变为可用。其默认值为’ '(空格),表示不等待,立即返回锁定失败的结果
  3. _SCOPE
    功能:控制锁或锁释放的行为,特别是在事务更新或调用更新子程序时的处理方式。
    定义:有三个主要值:1(锁和锁释放不传递给更新程序)、2(锁或锁释放传递给更新程序,更新程序负责移除锁)、3(锁必须从交互式程序和更新程序中同时移除)。
  4. MODE_
    功能:定义锁对象中的每个基础表(tab)的锁模式。
    定义:锁模式可以是S(共享锁,允许多个用户同时读取但不允许写入)、E(独占锁,只允许一个用户读取或写入)、X(独占锁但不是累计锁,类似于E但具有特定的行为差异)。
  5. _COLLECT
    功能:控制锁请求或锁释放是直接执行还是应该先被写入本地锁容器。
    定义:如果设置为’X’,锁请求或锁释放会被放在本地锁容器中,之后可以通过调用FLUSH_ENQUEUE函数模块成组地发送给锁服务器。如果未设置或设置为其他值,锁请求或锁释放将直接发送给锁服务器。
5.2代码调用
CALL FUNCTION 'ENQUEUE_ETRAIN01'
      EXPORTING
        MODE_TRDIR     = 'E'
        MANDT          = SY-MANDT
        CARRID         = 'AA'
        X_CARRID       = ' '
          ...
        _SCOPE         = '2'
        _WAIT          = ' '
        _COLLECT       = ' '

CALL FUNCTION 'DEQUEUE_ETRAIN01'
      EXPORTING
        MODE_TRDIR     = 'E'
        MANDT          = SY-MANDT
        CARRID         = 'AA'
        X_CARRID       = ' '
          ...
        _SCOPE         = '3'
        _WAIT          = ' '
        _COLLECT       = ' '

CALL FUNCTION 'DEQUEUE_ALL'  "清除所有锁
      EXPORTING
        _SYNCHRON     = ''

CALL FUNCTION 'ENQUEUE_E_TABLE'  "锁整个表
      EXPORTING
        MODE_TRDIR     = 'E'
        TABNAME        = 'SFLIGHT'.
        
CALL FUNCTION 'DEQUEUE_E_TABLE'
      EXPORTING
        MODE_TRDIR     = 'E'
        TABNAME        = 'SFLIGHT'.
	锁机制的目的不在于阻止DML语句,而是在于同期化数据。即使已经设置了锁,也可以直接执行SQL语句来更新数据。

二、ENQUEUE_READ 函数

ENQUEUE_READ函数返回被加锁的表数据列表。

CALL FUNCTION 'ENQUEUE_READ'
      EXPORTING
        GCLIENT    = SY-MANDT
*        GNAME      = ''
*        GUNAME     = SY-UNAME
*        LOCAL      = ''
*      IMPORTING
*        NUMBER     = 
*        SUBRC      =
      TABLES
        enq        = itab.

在这里插入图片描述

  • 30
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值