Forms. Эта запись уже открыта

monomakh
Дата: 02.08.2005 19:57:06
Приветствие!

Как проверить что запись уже заблокирована пользователем? Желательно нарисовать универсальную функцию. У нас как бы один человечек воял такую с помощью 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а там где он вроде как и не нужен.

Спасибо
pamir
Дата: 02.08.2005 20:06:24
сделать for update nowait и ловить TIMEOUT_ON_RESOURCE