Oracle: Criando campo como chave primário e de sequencial automático

seq

 

Pessoal, boa tarde!

Hoje vamos falar de uma coisa bem simples, mas que faz uma grande diferença na hora de inserir registros na tabela. Quando queremos criar um sequencial, mas não podemos criar em cima de um campo que será índice.

Para esses casos, vai uma dica,  criar um campo que será PK e que será um sequencial da tabela.

Para continuar no exemplo, iremos criar uma tabela Funcionário, como mostra o Script abaixo:

create table FUNCIONARIO (

FUNC_SEQ NUMBER(10),
NOME
VARCHAR2(10),
SALARIO
NUMBER(17,2),
CODIGO
NUMBER);

Vamos alterar a nossa tabela para receber a Chave Primária.

alter table FUNCIONARIO add constraint PK_FUNCIONARIO primarykey (FUNC_SEQ);

Agora vamos criar uma sequência:

CREATE SEQUENCE FUNC_SEQ MINVALUE MAXVALUE 9999999999
INCREMENT BY START WITH 1;

Essa sequência irá até o valor “9999999999”, já que o tamanho do campo vai até 10.

Após ter criado essa sequência, iremos criar uma TRIGGER para alimentar o campo Func_Seq com a sequência criada.

CREATE O RREPLACE TRIGGER FUNC_TRG BEFORE INSERT ON FUNCIONARIO
FOR EACH ROW
BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
IF :NEW.FUNC_SEQ IS NULL THEN
SELECT FUNC_SEQ.NEXTVAL INTO :NEW.FUNC_SEQ FROM DUAL;
END IF;
END COLUMN_SEQUENCES;
END;  

Toda vez que inserirmos algum registro, não será necessário incluir um valor para o campo Func_Seq.

Exemplo:

INSERT INTO FUNCIONARIO(NOME, SALARIO, CODIGO)

VALUES (‘JOSE’, 1500, 2);

Com a nossa Trigger, ele já irá atribui de forma automática o novo valor para campo Func_seq.

Galera, eu sei que é bem simples, mas as vezes nos ajuda bastante. Espero mais uma vez ter auxiliado no seu crescimento.

Abraços.