[firebase-br] Ref. Trigger

Sandro Souza escovadordebits em gmail.com
Qua Maio 6 15:16:31 -03 2009


Bom dia/tarde Omar.

Grande Omar, um generator, como você sabe é apenas um simples contador, e
cabe a nós utilizarmos conforme nossas necessidades, ou seja, não é o
generator que determina como ele será utilizado.

Nesse exemplo que você citou, basta atribuir o próximo valor desse generator
para o campo "ItVen_NumItem" na respectiva trigger do momento "before
insert" e tudo ok.

Dessa forma, você terá um cenário parecido com esse:

ItVen_Codigo 1, ItVen_NumItem 1.
ItVen_Codigo 1, ItVen_NumItem 2.
ItVen_Codigo 1, ItVen_NumItem 3.
ItVen_Codigo 2, ItVen_NumItem 4.
ItVen_Codigo 2, ItVen_NumItem 5.
ItVen_Codigo 3, ItVen_NumItem 6.

Como você pode ver, o valor de "ItVen_NumItem" nunca se repetirá se você
utilizar um generator para ele.

Caso você queira outro tipo de configuração, como a seguinte:

ItVen_Codigo 1, ItVen_NumItem 1.
ItVen_Codigo 1, ItVen_NumItem 2.
ItVen_Codigo 1, ItVen_NumItem 3.
ItVen_Codigo 2, ItVen_NumItem 1.
ItVen_Codigo 2, ItVen_NumItem 2.
ItVen_Codigo 3, ItVen_NumItem 1.

Então não utilize generator algum. Crie uma trigger parecida com a seguinte:

SET TERM ^ ;

CREATE OR ALTER TRIGGER TR_ITENS_VENDA_BI FOR ITENS_VENDA BEFORE INSERT AS
DECLARE VARIABLE NOVOCODIGO INTEGER;
BEGIN
  -- Obtém o maior código utilizado nos itens da venda informada.
  SELECT MAX(ITVEN_NUMITEM) FROM ITENS_VENDA WHERE ITVEN_CODIGO =
:NEW.ITVEN_CODIGO INTO :NOVOCODIGO;
  -- É o primeiro item da venda?
  IF (NOVOCODIGO IS NULL) THEN
    -- Utiliza o primeiro código.
    :NEW.ITVEN_NUMITEM = 1;
  ELSE
    -- Utiliza o próximo código disponível.
    :NEW.ITVEN_NUMITEM = NOVOCODIGO + 1;
  -- Outros processamentos...
END^

SET TERM ; ^

É só um exemplo, mas espero que seja útil.

Espero ter ajudado mais que atrapalhado. :D

2009/5/6 Omar Haddad <omarhaddadm em gmail.com>

> Salve amigos.
>
> Como se comportaria um Generator, em uma tabela que tem chave primária
> composta, por exemplo:
>
> Tabela: ITENS_VENDA
>
> Campos:
> ---------
>
> ItVen_Codigo I    (Vem da tabela chave)
> ItVen_NumItem   (Campo que tem como base um generator).
>
> Ele para um determinado código-chave, ele incrementaria e geraria um
> generator corretamente.
>
> //--
>
>
> Att.
> Omar Marques Haddad
> Analista de Sistemas Sênior
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista