[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