在sap中对表的加锁和解锁

注意:在一个程序中给表加锁,程序结束会自动解锁,可以通过SM12查看是否个表加锁成功

lock mode有三种模式:分别是S,E,X.含义如下:
S (Shared lock, read lock)
E (Exclusive lock, write lock)
X (eXclusive lock, extended write lock, cannot be cumulated)
模式E:当更改数据的时候设置为此模式。
模式S:本身不需要更改数据,但是希望显示的数据不被别人更改。
模式X:和E类似,但是不允许累加,完全独占。

允许附加锁模式 E S X

E 否(是) 否(是) 否(否)

S 否(是[无其他用户加S]) 是(是) 否(否)

X 否(否) 否(否) 否(否)

括号外为其他用户操作,括号内为同一个用户的操作

 

也可以为特定的表创建锁对象,在SE11事物里,选择lock object(锁对象),点击创建
输入相应的参数,最后保存,激活即可。注意,要允许RFC

在激活之后,会产生两个function module,一个用来对对象进行锁定,另一个是释放对象。二者的名字都很有规律。

DEQUEUE_<lock object的名字> 解锁
ENQUEUE_<lock object的名字> 锁定

到时要使用的时候直接call function module即可。
  CALL FUNCTION 'ENQUEUE_E_TABLE'
        EXPORTING
          mode_rstable   = c_e
          tabname        = c_tabname
          varkey         = v_varkey
        EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ELSE.
        MOVE-CORRESPONDING <fs_data> TO x_final.
        x_final-mandt = sy-mandt.

        SELECT product_family,                          "#EC CI_NOFIELD
          delete_flag
          FROM zmm_bin_exploder
          INTO TABLE @DATA(it_prfam)
          WHERE bin_code = @x_final-item.

        LOOP AT it_prfam INTO DATA(x_prfam).
          IF x_prfam-delete_flag NE c_x.
            x_final-product_family = x_prfam-product_family.
          ENDIF.
          CLEAR x_prfam.
        ENDLOOP.

        x_final-vendor = v_vend.
        x_final-date_stmp = sy-datum.
        x_final-time_stmp = sy-uzeit.

        MODIFY zmm_subconinv_s4 FROM x_final. "move data from internal table to custom table
      ENDIF.

      IF sy-subrc = 0.
        COMMIT WORK.
        CALL FUNCTION 'DEQUEUE_E_TABLE' ##FM_SUBRC_OK
          EXPORTING
            mode_rstable = c_e
            tabname      = c_tabname
            varkey       = v_varkey.
      ENDIF.

      CLEAR: x_final.
    ENDIF.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值