Fórum Duvidas com trigger - como alimentar um campo com regra #51795
26/07/2005
0
O campo empresa esta relacionado com outra tabela (empresa).
Na tabela de historico minha chave primaria é empresa, codigo.
Gostaria de criar uma trigger que quando inclui-se um novo registro
pegasse o nr. do ultimo historico da empresa x e somasse mais um.
Por exemplo, tenho as empresas 1 e 2
Minha tab de historico esta zerada.
Na primeira inserção da empresa 1 deveria ficar assim:
inserção empresa codigo
1............. 1 ................ 1
2............. 1 ................ 2
3............. 1 ................ 3
O problema é quando for lançar a empresa 2, o código não poderá ser 4 uma vez que não pertence a esta empresa, deverá ser assim:
inserção empresa codigo
1............. 1 ................ 1
2............. 1 ................ 2
3............. 1 ................ 3
4............. 2 ................ 1
5............. 2 ................ 2
6............. 2 ................ 3
7............. 2 ................ 4
8............. 1 ................ 4
9............. 1 ................ 5
Como posso fazer isto?
Obrigado.
Emarcolongo
Curtir tópico
+ 0Posts
26/07/2005
Gandalf.nho
SET TERM ^; CREATE TRIGGER GERA_CODIGO FOR HISTORICO BEFORE INSERT AS DECLARE VARIABLE ULTIMOCODIGO INTEGER; BEGIN SELECT MAX(CODIGO) FROM HISTORICO WHERE EMPRESA = NEW.EMPRESA INTO :ULTIMOCODIGO; NEW.CODIGO = ULTIMOCODIGO; END ^ SET TERM ;^
Gostei + 0
27/07/2005
Emarcolongo
Como devo fazer agora ?
Obrigado.
Gostei + 0
27/07/2005
Gandalf.nho
SET TERM ^; CREATE TRIGGER GERA_CODIGO FOR HISTORICO BEFORE INSERT AS DECLARE VARIABLE ULTIMOCODIGO INTEGER; BEGIN SELECT COALESCE(MAX(CODIGO), 0) FROM HISTORICO WHERE EMPRESA = NEW.EMPRESA INTO :ULTIMOCODIGO; NEW.CODIGO = ULTIMOCODIGO + 1; END ^ SET TERM ;^
Gostei + 0
28/07/2005
Emarcolongo
Vc utilizou comandos que eu não conhecia, sou iniciante na programação do banco, que agora aprendi.
So mais um duvida, sei que devemos colocar : na varivel, mas porque quando usamos:
new.codigo = ultimocodigo + 1;
ficou sem os :
coloquei e o resultado foi o mesmo, por que então a diferença.
Obrigado por tudo.
Gostei + 0
28/07/2005
Gandalf.nho
Gostei + 0
29/07/2005
Emarcolongo
Obrigado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)