Про 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, которая снимется, когда закончится процесс, установивший блокировку.
Комментариев нет:
Отправить комментарий