Обновите уникальный идентификатор (начните с 1) для внешнего ключа, и уникальный идентификатор снова начнется с 1 следующего внешнего ключа - PullRequest
0 голосов
/ 08 мая 2019

Мне нужно обновить таблицу 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
...