我需要使用唯一 ID(CHARGE_NUMBER)再次更新 product_details 表,对于每个 batch_ID,下一个批次 ID 的唯一 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
一个配置文件在 inv_gen_trans 表和以下具有一些批次 ID 3 - 4 批次 ID 的配置文件是 product_details 表中的预期输出
process_id |charge_number
---------------|--------------
20190430810985 |1
20190430810985 |2
20190430810986 |1
20190430810986 |2
20190430810987 |1