sexta-feira, 16 de novembro de 2007

Autoincrement no Firebird

Uma das coisas chatas de usar o Firebird é que ele não tem o campo autoincrement (ou pelo menos não tinha até essa postagem). Isso é particularmente chato, porque o autoincrement é legal, e facilita a vida do programador.

Tá, vamos aos códigos.

Primeiro, deve-se criar um Generator. Um generator é um gerador de números que o banco de dados usa pra fazer o controle dessas coisas.

Importante: Se houver mais de um campo autoincrement no banco de dados, será necessária a criação de um generator pra cada um.

Suponhamos que queira o campo "codigo" da tabela "aluno" seja autoincrement. Primeiro cria-se o gerador "gen_cod_aluno":

CREATE GENERATOR gen_cod_aluno;

Agora deve-ser criar uma trigger para que esse gerador seja incrementado cada vez que o usuário tentar inserir algum valor no banco de dados:

CREATE TRIGGER FOR aluno
ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
NEW.codigo = GEN_ID(gen_cod_aluno,1);
END;

Traduzindo, criou-se uma trigger para a tabela aluno, que será ativada antes que um registro seja inserido, atribuindo ao campo "codigo" o valor armazenado em "gen_cod_aluno", somado a 1.

De novo, pra cada campo autoincrement, uma trigger e um generator.

Té mais o/

2 comentários:

Guilherme disse...

Dizem por ai que usar AI é ruim =\ pq ai tu não pode se abstrair do BD

Guilherme disse...

Dizem por ai que se deve ter uma variável que guarde os indices dos registros e na hora de inserí-los, deve-se fazer algo assim: INSERT INTO Alunos(id_aluno, blablabla) values (variavelindice++, bla bla bla) que ai tu pode usar qualquer banco com tua aplicação ;)