Я бы не использовал последовательность для этого.
Если есть родительская таблица, для которой PO_HEADER
является внешним ключом, захватите блокировку родительской строки.Затем SELECT MAX(line_num)+1...
для этого заказа и используйте его.Не снимайте блокировку с родительской таблицы, пока не вставите вставку в TABLE1
.
Если у вас нет родительской таблицы, вы можете использовать DBMS_LOCK
, чтобы выполнить то же самое.(Назначьте пользовательскую блокировку, представляющую PO, и заблокируйте ее вместо родительской таблицы.)
Поскольку ваше приложение хорошо спроектировано и через этот код происходит все TABLE1
вставки, вы знаете,это будет работать.Блокировка родительской таблицы гарантирует, что две сессии не получат одинаковый номер следующей строки, потому что блокировка заставляет их действовать один за другим.
Если ваше приложение не так хорошо разработано, это вам не поможет.