Про database commit и rollback.
SELECT SINGLE * FROM ztest_01 INTO @DATA(ls_test_01) WHERE id = '5'.
ls_test_01-lastname = |{ sy-datum }-{ sy-uzeit }|.
MODIFY ztest_01 FROM ls_test_01.
" Неявный database commit
" Передача управления SAP GUI
" Например, переход к экрану
CALL SCREEN 0110.
" Сообщение типа I, W, E
MESSAGE 'Message' TYPE 'I'.
" Вызов RFC ФМ, а также возврат из RFC ФМа
CALL FUNCTION 'Z_TEST_01_BKG'
DESTINATION 'NONE'
EXPORTING
is_test_01 = VALUE ztest_01( ).
" Явный database commit
" Вызов COMMIT WORK
COMMIT WORK.
" Вызов ФМ DB_COMMIT
CALL FUNCTION 'DB_COMMIT'.
" Неявный database rollback
" Сообщение типа A, X
MESSAGE 'Message' TYPE 'A'.
" Runtime error
" Явный database rollback
" Вызов ROLLBACK WORK.
ROLLBACK WORK.
" Вызов ФМ DB_ROLLBACK
CALL FUNCTION 'DB_ROLLBACK'.
Если до коммита сделать выборку данных из БД, то получим обновленные данные, хотя database commit ещё не выполнен.
SELECT SINGLE * FROM ztest_01 INTO @DATA(ls_test_01) WHERE id = '5'.
ls_test_01-lastname = |{ sy-datum }-{ sy-uzeit }|.
MODIFY ztest_01 FROM ls_test_01.
SELECT SINGLE * FROM ztest_01 INTO @DATA(ls_test_01_new) WHERE id = '5'.
" В ls_test_01_new-lastname будет значение ls_test_01-lastname
Операторы изменения данных в БД устанавливают блокировку на запись(и). Если до окончания database commit другой процесс будет изменять те же данные, возникнет database lock, которая снимется, когда закончится процесс, установивший блокировку.
Комментариев нет:
Отправить комментарий