0

我需要使用唯一 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
4

0 回答 0