sobre Trigger

Firebird

12/07/2004

Essa trigger:
AS
declare variable autoinc integer;
begin
select max(codgrup)as cod from grupos into autoinc;
if (autoinc is null) then
autoinc = 0;
autoinc = grupos.codgrup + 1;
new.codgrup = autoinc;
end

Trigger Before Insert, mas quando dispara dá a mensagem que o codgrup não tem valor. O que está errado?


Amilton/pr

Amilton/pr

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

12/07/2004

Nesse caso não seria mais fácil usar generator?


GOSTEI 0
Amilton/pr

Amilton/pr

12/07/2004

Realmente. vou usar Generator, mas em caso de trigger, com seria uma trigger pra incrementar um valor num campo numérico?


GOSTEI 0
Afarias

Afarias

12/07/2004

o erro da sua trigger está aqui::

autoinc = grupos.codgrup + 1;

deveria ser

autoinc = autoinc + 1;


no mais, o correto realmente é usar um generator, e ficaria assim::

new.codgrup = gen_id(generator, 1);



T+


GOSTEI 0
Amilton/pr

Amilton/pr

12/07/2004

Blz., mas por que sei que o valor do codgrup(codigo do grupo) vai ser acrescentado de +1? Onde a variável pega o maior valor pra somar com 1?
Desculpem . . . é a primeira vez que faço uma trigger!


GOSTEI 0
Gandalf.nho

Gandalf.nho

12/07/2004

Generator nada mais é do que um tipo de ´variável´ armazenada no banco que guarda um número inteiro. A função GEN_ID usada na trigger incrementa o valor da generator pelo número declarado na função.


GOSTEI 0
Amilton/pr

Amilton/pr

12/07/2004

Entendi, mas quero saber numa trigger before Insert, como eu pego o maior valor de um campo numérico e acrescento +1 pra gravar o registro, como se fosse auto incremento . . .


GOSTEI 0
Afarias

Afarias

12/07/2004

>> select max(codgrup) from grupos into :autoinc;

o código acima pega o maior valor do campo codgrup na tabela grupos e joga na variável autoinc


>> autoinc = autoinc + 1;

Aqui o valor de autoinc é acrescido de 1


>> new.codgrup = autoinc;

Aqui, o campo codgrupo no registro sendo inserido ou atualizado recebe o valor da variável autoinc


T+


GOSTEI 0
POSTAR