Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Aroldo Rique

Como criar uma chave primária: Ano Corrente + número auto-incremental?

Recommended Posts

Prezados, estou precisando criar um campo de chave-primária que tenha o seguinte formato: Ano corrente + número auto-incremental.

 

Exemplos:

201400001

201400002

201400003

...

201499999

201500001

 

Na virada de cada ano, a parte auto-incremental da chave-primária deve voltar a ser 00001 e será concatenada com o ano corrente.

 

Alguém já fez algo parecido? Criaram alguma sequence pra isso?

 

Antecipadamente agradeço as respostas!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por sequence seria inseguro e trabalhoso tratar a "virada" , a melhor solução que vejo e por trigger.

 

Algo como

 

Trigger

Insert

Before

 

Select nvl(max(id)+1,1)

Into vn_seq

From tabela

Where ano =:new.ano;

 

:new.id := :new.ano||lpad(n_seq,5,'0');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por sequence seria inseguro e trabalhoso tratar a "virada" , a melhor solução que vejo e por trigger.

 

Algo como

 

Trigger

Insert

Before

 

Select nvl(max(id)+1,1)

Into vn_seq

From tabela

Where ano =:new.ano;

 

:new.id := :new.ano||lpad(n_seq,5,'0');

Motta, obrigado pela ajuda.

 

Só tem um problema, o campo id teria que ser zerado na "virada" não é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

algo assim , não testei ...

CREATE TRIGGER TRIGGER1
BEFORE INSERT ON TABELA
IS
  VN_SEQ NUMBER;
  VN_ID  NUMBER;
BEGIN
  SELECT NVL((MAX(ID)+1),1)
  INTO   VN_SEQ
  FROM   TABELA
  WHERE  SUBSTR(ID,1,4) = TO_CHAR(SYSDATE,'YYYY');
  --
  VN_ID := TO_NUMBER(TO_CHAR(SYSDATE,'YYYY') || LPAD(VN_ID,6.'0'));
  :NEW.ID := VN_ID;
END;
/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.