segunda-feira, 10 de janeiro de 2011

Alterando Start da Sequence

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:

clip_image002 

Nenhum comentário :

Postar um comentário

Related Posts Plugin for WordPress, Blogger...