Приветствие!
Как проверить что запись уже заблокирована пользователем? Желательно нарисовать универсальную функцию. У нас как бы один человечек воял такую с помощью DBMS_SQL. Все хорошо, да вот там он использует FOR UPDATE SKIP LOCKED а SKIP LOCKED тут я на форуме прочитал, что не является документированным параметром и из этого вытекает, что лучше его не использовать.
Кто-то на форуме предлагал сделать через FOR UPDATE и проверять EXCEPTION.
FUNCTION IS_LOCK
( tablename IN varchar2,
whereclause IN varchar2)
RETURN boolean IS
-- Функция предназначена для определения заблокированной строки. возвращает true если запись заблокирована
cursor_name INTEGER;
rows_processed INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM '||tablename||' WHERE '||whereclause||' FOR UPDATE';
return true;
EXCEPTION
WHEN OTHERS THEN
return false;
END; |
Уже думаю что работает, как понял что тоже нет. убрав skip locked я просто напросто блокирую проверяемую запись, если она до того была свободна.
В общем в итоге я подумал, что пора спросить Вас, Уважаемые.
По идее, конечно, можно сделать PRAGMA и добавить COMMIT, но я вообще не любитель commitа там где он вроде как и не нужен.
Спасибо