У меня есть процедура, и я хотел бы, чтобы только один пользователь мог выполнить эту процедуру одновременно.
Это просто не в моей голове: рассмотрите возможность использования именованной блокировки через dbms_lock. http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_lock.htm#CHDICHDC
Сразу после того, как оператор begin получает блокировку, выполните работу, затем отпустите ее. выход (Помните об ошибках / исключениях!).
KT
Простым решением может быть использование блокировки на уровне таблицы с помощью FOR UPDATE.