项目使用oracle作为数据库,最初时多个表共用了一个sequence来生产主键,后来需要改造为一个表一个sequence。为了不对历史数据修改,需要根据每个表现在的主键值来确定新建的sequence的start with值。比如需要为user_表新增一个名为seq_user的sequence,而user_表的主键为user_id_,那么语法如下:
BEGIN
declare max_val number;
BEGIN
select max(user_id_) into max_val from user_;
execute immediate('CREATE sequence seq_user minvalue 1 maxvalue 999999999999 start with '||max_val||' increment by 1 cache 50 ');
END;
END;