Fórum sobre Trigger #45442

12/07/2004

0

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

Responder

Posts

12/07/2004

Gandalf.nho

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


Responder

Gostei + 0

12/07/2004

Amilton/pr

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


Responder

Gostei + 0

12/07/2004

Afarias

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+


Responder

Gostei + 0

12/07/2004

Amilton/pr

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!


Responder

Gostei + 0

12/07/2004

Gandalf.nho

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.


Responder

Gostei + 0

12/07/2004

Amilton/pr

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 . . .


Responder

Gostei + 0

13/07/2004

Afarias

>> 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+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar