ABAP 锁对象

锁对象的使用
创建锁对象以及对锁的使用
ABAP锁、数据库锁
在这里插入图片描述
在这里插入图片描述

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

加锁:

*&---------------------------------------------------------------------*
*& FORM GET_ALV_DATA
*&---------------------------------------------------------------------*
*  获取数据
*----------------------------------------------------------------------*
*      -->
*      -->
*----------------------------------------------------------------------*
FORM get_alv_data  TABLES   p_gt_alv_output STRUCTURE gw_alv_output.


  DATA lv_serial TYPE zppt002b-zserial.

  "对流水号对象上锁      "锁表内容,而不是整个表
  CALL FUNCTION 'ENQUEUE_EZZPPT002B1'  "加锁
    EXPORTING
*     MODE_ZPPT002B  = 'E'
*     client         = sy-mandt
      ztype          = p_type   "选择屏幕条件
*     X_PART_NO      = ' '
*     _SCOPE         = '2'
*     _WAIT          = ' '
*     _COLLECT       = ' '
    EXCEPTIONS
      foreign_lock   = 1
      system_failure = 2
      OTHERS         = 3.
  "如果加锁成功
  IF sy-subrc = 0.
    "查询自建表数据
    SELECT
      zserial
      FROM zppt002b
      INTO @lv_serial
      WHERE
            ztype   =  @p_type
        AND zserial GE @sy-datum+0(6)
      ORDER BY zserial DESCENDING
      .
      EXIT.
    ENDSELECT.

    IF sy-subrc <> 0.
      "如果自建表没有数据,则设置序列号
      CONCATENATE sy-datum+0(6) '0001' INTO lv_serial.
    ELSE.
      "如果自建表有数据
      lv_serial = lv_serial + 1.
    ENDIF.

    "给ALV内表设置值
    DO p_quan TIMES.
      CLEAR gw_alv_output.
      gw_alv_output-type   = p_type.
      gw_alv_output-serial = lv_serial.
      APPEND gw_alv_output TO p_gt_alv_output.
      lv_serial = lv_serial + 1.
    ENDDO.

  ENDIF.

ENDFORM.

解锁:

*&---------------------------------------------------------------------*
*& Form SAVE_SERIAL
*&---------------------------------------------------------------------*
*& 打印成功后把相应的序列号保存到表中
*&---------------------------------------------------------------------*
*&      --> LT_ALV_OUTPUT
*&---------------------------------------------------------------------*
FORM save_serial  TABLES   p_gt_sf_output STRUCTURE gw_sf_output.

  MODIFY zppt002b FROM TABLE p_gt_sf_output.

  IF sy-subrc = 0.
    CALL FUNCTION 'DEQUEUE_EZZPPT002B1'  "解锁
      EXPORTING
*       MODE_ZPPT002B  = 'E'
*       CLIENT     = SY-MANDT
        ztype = p_type
*       X_PART_NO  = ' '
*       _SCOPE     = '3'
*       _SYNCHRON  = ' '
*       _COLLECT   = ' '
      .
  ENDIF.
ENDFORM.
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值