Algumas vezes podemos ter a necessidade de criar uma sequence no Oracle com um valor igual ao maior id de uma determinada tabela acrescido de 1. Para fazer isso é bem simples, bastando utilizar a a cláusula “START WITH” no momento da criação da sequence, seguido do valor que se deseja que a sequence seja iniciada. Porém nem sempre podemos colocar manualmente esse valor pois caso o script não seja executado no momento em que foi criado pode ser que o valor inserido manualmente não seja mais o maior id da tabela, então a solução para isso é utilizar um script PL/SQL para pegar o maior id da tabela em tempo de execução, como no exemplo abaixo.
1 2 3 4 5 6 7 8 9 | BEGIN DECLARE seqval NUMBER; BEGIN SELECT max (id_da_tabela) INTO seqval FROM minha_tabela; execute immediate( 'CREATE SEQUENCE SEQ_tabela MINVALUE 1 START WITH ' || (seqval+1) || ' INCREMENT BY 1 NOCACHE NOORDER NOCYCLE' ); END ; END ; / |