Use dbms_lock.allocate_unique junto com dbms_lock.request. As notas de uso diz:
A primeira sessão a chamar ALLOCATE_UNIQUE com um novo nome de bloqueio faz com que um ID de bloqueio exclusivo seja gerado e armazenado na tabela dbms_lock_allocated. Chamadas subsequentes (geralmente por outras sessões) retornam o ID de bloqueio gerado anteriormente.
Acho que pode ser isso que você está procurando.