2015-11-25 1 views
0

Мне нужно ограничить параллельную вставку в базе данных оракула.можно ограничить параллельную вставку в базе данных оракула

Возможно ли без проверки вручную или есть что-нибудь в базе данных оракула, которые ограничивают вторую транзакцию одним и тем же пользователем или что-нибудь в jdbc?

Спасибо.

+0

Что вы имеете в виду под "ограничить"? Что должна делать вторая транзакция - блокировать до тех пор, пока первая транзакция не будет выполнена или не сработает с сообщением об ошибке? –

+0

Вторая транзакция не удалась. В настоящее время и успех транзакции, и данные, вставленные в таблицу. –

+0

У вас есть контроль над операторами SQL? Значит, поможет «ВЫБЕРИТЕ ДЛЯ ОБНОВЛЕНИЯ NOWAIT»? –

ответ

0

Вы должны использовать материализованное представление для определения такого ограничения.

первый подход:

create table froc3(id number, 
        userid number, 
        starttime date, 
        endtime date, 
        constraint froc3_id unique(id)); 

create materialized view froc3_mv refresh on commit as 
    select f1.id as id, f2.id as id_conflict 
    from froc3 f2, froc3 f1 
    where f2.userid = f1.userid 
    and f2.id <> f1.id 
    and (f2.starttime between f1.starttime and f1.endtime or 
     f2.endtime between f1.starttime and f1.endtime); 

alter table froc3_mv add constraint check_interval check(id = 
                 id_conflict) deferrable; 
Смежные вопросы