Passo 1: Crio a Sequence
| create sequence SEQ_TESTE minvalue 1 maxvalue 999999999999999999 start with 20101000000000 increment by 1 nocache; |
Passo 2: Crio uma tabela para testes
| create table sq_teste_seq (col1 number, col2 number(20)); |
Passo 3: Crio uma rotina para adicionar 200 registros
| declare i number := 0; begin for i in 1..200 loop insert into sq_teste_seq values (seq_teste.nextval,20); end loop; commit; end; |
Passo 4: Crio uma rotina para atualizar a Sequence.
Adiciono 1 aos quatro primeiros dígitos da Sequence, neste caso representando o ano
| Declare last_num number := 0; new_num number := 0; incr_num number := 0; new_val number := 0; v_sql varchar2(200); begin -- Pego o último número da sequence select last_number into last_num from user_sequences where sequence_name = 'SEQ_TESTE';
-- Pego os primeiros 4 digitos da sequence (ANO) e somo mais um new_num := substr(last_num,1,4); new_num := new_num + 1; new_num := new_num || substr(last_num,5,length(last_num)-4); dbms_output.put_line (new_num);
-- Calculo o novo incrementador incr_num := new_num - last_num; dbms_output.put_line (incr_num); -- Atualizo o número do incrementador da sequence v_sql := 'alter sequence seq_teste increment by ' || incr_num || ' nocache'; execute immediate (v_sql);
-- Atualizo o próximo valor da sequence select seq_teste.nextval into new_val from dual; dbms_output.put_line (new_val);
-- Retorno o incrementador a 1 execute immediate 'alter sequence seq_teste increment by 1 cache 20'; end; |
Para testar execute o Passo 3 novamente e veja o resultado que deve ficar da forma abaixo: