在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 否(否) 否(否) 否(否)

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

1、加锁
CALL FUNCTION 'ENQUEUE_E_TABLE'
  EXPORTING
    MODE_RSTABLE         = 'E'
    TABNAME              = 'SFLIGHT'
*   VARKEY               =  //key值加上就是锁行,不加为锁住整个表
*   X_TABNAME            = ' '
*   X_VARKEY             = ' '
    _SCOPE               = '2'
*   _WAIT                = ' '
*   _COLLECT             = ' '
  EXCEPTIONS
    FOREIGN_LOCK         = 1
    SYSTEM_FAILURE       = 2
    OTHERS               = 3.
2、解锁
CALL FUNCTION 'DEQUEUE_E_TABLE'
  EXPORTING
    MODE_RSTABLE       = 'E'
    TABNAME            = 'SFLIGHT'
*   VARKEY             = //作用和加锁的一样
*   X_TABNAME          = ' '
*   X_VARKEY           = ' '
    _SCOPE             = '3'
*   _SYNCHRON          = ' '
*   _COLLECT           = ' '.

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

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

DEQUEUE_ 解锁
ENQUEUE_ 锁定

到时要使用的时候直接call function module即可。

你可能感兴趣的:(ABAP,SAP,abap,sap)