对于我们自定义的数据库表,我们一般都会对其做更新,删除处理,这样就会有这么一个问题,可能会出现多人同时对一个表内的同一数据进行操作,这时在程序里我们就要对其进行锁表处理,什么是锁表呢,就是在某一用户对表进行处理的时候,首先把此表锁定,在锁定期间只有此用户一个人可以对表进行处理,等处理完了。再把表解锁。这样就可以避免多人同时对一个表同时处理出现错误,我们来 SAP培训一下,处理步骤一般为
1,锁定对象
2,更新处理
3,提交处理(COMMIT/ROLLBACK)
4,解锁处理
下面我们来看看锁表处理和解锁处理的语法,我们以表ZXXQ012,对象EZZXXQ012_1为例,则锁表调用函数ENQUEUE_EZZXXQ012_1,解锁用函数DEQUEUE_EZZXXQ012_1
1,锁表
CALL FUNCTION 'ENQUEUE_EZZXXQ012_1'
EXPORTING
BUKRS = WA_ZXXQ012-BUKRS
RYAKG = WA_ZXXQ012-RYAKG
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3.
2,解锁
*解锁一个表
CALL FUNCTION 'DEQUEUE_EZZXXQ012_1'
EXPORTING
BUKRS = WA_ZXXQ012-BUKRS
RYAKG = WA_ZXXQ012-RYAKG
*解锁全部表(把执行的事务代码相关的所有被锁的表都解开)
CALL FUNCTION 'DEQUEUE_ALL'.
注:上面两个函数是创建了表对应的锁对象的话,会自动被创建的。锁对像用SE11创建,我们在后面会详讲
3,提交/回转处理
关于锁机制详细请参看 SAP锁机制 |