Você está aqui: Firebird ::: Dicas & Truques ::: Comandos DDL (Data Definition Language - Linguagem de Definição de Dados) |
Como criar uma tabela contendo um campo auto-incremento no FirebirdQuantidade de visualizações: 20397 vezes |
Em algumas situações precisamos criar tabelas que contenham campos auto-incremento. Estes campos são geralmente do tipo inteiro, chave primária e usados para identificar, unicamente, um produto, cliente, pedido, etc. O Firebird, até sua versão 2.5, não fornece uma forma automática de se criar campos auto-incremento. Para conseguir realizar esta tarefa precisamos usar um gerador GENERATOR ou SEQUENCE. Nesta dica eu mostro passo-a-passo como isso pode ser feito. Vamos começar da forma mais complicada, ou seja, sem usar nenhuma ferramenta gráfica, apenas o SQL Editor do IBExpert. Para acessá-lo vá em Tools -> SQL Editor. Siga atentamente os passos abaixo: a) Comece criando a seguinte tabela. Basta copiar o comando DDL CREATE TABLE abaixo, colar no SQL Editor e pressionar F9: /* criação da tabela CLIENTES */ CREATE TABLE CLIENTES( ID INTEGER NOT NULL, NOME VARCHAR(40) NOT NULL, EMAIL VARCHAR(40) NOT NULL ); b) O passo seguinte é definir o campo ID como chave primária. Isso pode ser feito com o seguinte comando DDL: ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (ID); c) Agora que já temos a tabela, chegou a hora de criar o GENERATOR/SEQUENCE. Cole o código a seguir na janela do SQL Editor e pressione F9 (execute uma linha de cada vez): CREATE SEQUENCE GEN_CLIENTES_ID; ALTER SEQUENCE GEN_CLIENTES_ID RESTART WITH 0; Veja que aqui eu estou usando a nova sintáxe de criação de SEQUENCE do Firebird 2.5. Se você estiver usando uma versão mais antiga, a sintáxe correta é (novamente execute uma linha de cada vez): CREATE GENERATOR GEN_CLIENTES_ID; SET GENERATOR GEN_CLIENTES_ID TO 0; d) Estamos quase finalizando. Só precisamos criar um trigger que será disparado antes da inserção de novos registros (BEFORE INSERT). Veja o código: CREATE TRIGGER TRIGGER_CLIENTES_BI FOR CLIENTES ACTIVE BEFORE INSERT POSITION 0 AS BEGIN if (NEW.ID is NULL) then NEW.ID = GEN_ID(GEN_CLIENTES_ID, 1); END; Este trigger faz com que o valor do campo ID seja sempre auto-incremento, começando em 1. Hora do teste final! Insira alguns registros na tabela usando um comando DML INSERT INTO parecido com o que temos abaixo: INSERT INTO CLIENTES(NOME, EMAIL) VALUES('OSMAR J. SILVA', 'osmar@arquivodecodigos.net'); Note que o campo ID não é mencionado na query. Isso faz com que seu valor seja enviado como NULL e o trigger se encarregue de gerar o novo valor auto-incremento e atribuí-lo a este campo. |
![]() |
Veja mais Dicas e truques de Firebird |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |