Мне нужно обновить таблицу product_details с уникальным идентификатором (CHARGE_NUMBER) снова для каждого batch_ID, и для следующего идентификатора партии уникальный идентификатор снова будет начинаться с 1
Я написал код, используя последовательность.
update product_details
set charge_number = charge_num_seq.nextval
process_id = i.batch_id ;
Но есть один вопрос: «Что делать, если происходит несколько параллельных транзакций? Это может не дать правильного результата»
CREATE OR REPLACE PROCEDURE cbf_update_adjustment_seq(p_profile_id character varying) AS
begin
for j in (select * from inv_gen_trans where profile_id = p_profile_id) loop
begin
update product_details
set adj_seq = update_adj_seq.nextval ,
charge_number = charge_num_seq.nextval
where
process_id = j.batch_id ;
ALTER SEQUENCE charge_num_seq RESTART WITH 1;
ALTER SEQUENCE update_adj_seq RESTART WITH 1;
ALTER SEQUENCE update_adj_seq RESTART WITH 1;
exception
when others then
dbms_output.put_line('Error:'||errmsg);
end;
end loop;
end
Один профиль, имеющий несколько идентификаторов партии, 3-4 идентификатора партии в таблице inv_gen_trans и ниже - ожидаемый результат в таблице product_details
process_id |charge_number
---------------|--------------
20190430810985 |1
20190430810985 |2
20190430810986 |1
20190430810986 |2
20190430810987 |1