Это ответ на комментарий, отправленный erikkallen:
Вам не нужна временная таблица. Если у вас есть только несколько строк, (SELECT 1 FROM dual UNION SELECT 2 FROM dual). Почему ваш пример даст ORA-0001? Не объединил бы блокировку обновления на ключе индекса и не продолжил бы до тех пор, пока Sess1 не вернется или не вернется? - erikkallen
blockquote>Ну, попробуйте сами и скажите, есть ли у вас такая же ошибка:
SESS1:
create table t1 (pk int primary key, i int); create table t11 (pk int primary key, i int); insert into t1 values(1, 1); insert into t11 values(2, 21); insert into t11 values(3, 31); commit;
SESS2 :
insert into t1 values(2, 2);
SESS1:
MERGE INTO t1 d USING t11 s ON (d.pk = s.pk) WHEN NOT MATCHED THEN INSERT (d.pk, d.i) VALUES (s.pk, s.i);
SESS2:
commit;
SESS1:
ORA-00001