Допустим, у нас есть процедура, которая принимает buffer
-параметр:
myprocedure.p:
DEF PARAM BUFFER bufferParameter FOR DatabaseTable.
/* Get the same buffer in EXCLUSIVE-LOCK for updating */
FIND CURRENT bufferParameter EXCLUSIVE-LOCK.
/* Update the value */
ASSIGN bufferParameter.MyField = "new value".
/* Reset the locking mode back to the original one? */
FIND CURRENT bufferParameter NO-LOCK.
Проблема с этим подходом в том, что он, возможно, изменяет исходный locking-mode
переданного buffer parameter
. Возможно, что буфер был в EXCLUSIVE-LOCK
или f.ex в NO-LOCK
. Изменив locking-mode
, эта процедура могла вызвать ошибки обновления в некоторых других программах, использующих тот же buffer
.
Другое решение - создать новый temporary buffer
для той же таблицы, а затем обновить базу данных через этот буфер (не касаясь переданного буфера параметров). Минус этого подхода в том, что переданный оригинал buffer parameter
станет «устаревшим». Потребуется новый запрос к базе данных, чтобы обновить его значение 'MyField'
, чтобы оно соответствовало значению в базе данных.
Как мне восстановить locking-mode
исходный буфер буфера после его fields
обновления?