[firebase-br] Triggers

Sandro Souza escovadordebits em gmail.com
Quarta Fevereiro 23 12:17:56 -03 2022


Bom dia/tarde/noite.

1 - Note que você tem dois valores na cláusula SELECT, e portanto, teria
que ter 2 (duas) variáveis na cláusula INTO, porém você só informou uma
única variável.

2 - Da forma que está esse SELECT, ele pode retornar mais de uma
linha/registro, e dessa forma, pode gerar uma exceção/erro em tempo de
execução.

3 - Procure sempre evitar usar o tipo DOUBLE PRECISION, porque ele é apenas
uma aproximação de um número, e não garante exatidão. Prefira usar o tipo
NUMERIC e sempre no dialeto 3, pois serão armazenados como inteiros
internamente, garantindo a maior precisão possível.

Poderia modificar para a seguinte forma:

AS
  DECLARE VARIABLE AUX DOUBLE PRECISION;
  DECLARE VARIABLE QTDE DOUBLE PRECISION;
BEGIN
  FOR SELECT NEW.CODIGO, SUM(NEW.QTDE)
      FROM ITENS
      GROUP BY NEW.CODIGO
      INTO :AUX, :QTDE DO
  BEGIN
    /* Código de tratamento de AUX e QTDE... */
  END
END

Dúvida 1: Essa trigger é da própria tabela ITENS?

Dúvida 2: Não vi qualquer cláusula WHERE relacionando a tabela ITENS com a
tabela dessa trigger. É para ser assim mesmo?

Espero ter ajudado mais que atrapalhado. :D

Em ter., 22 de fev. de 2022 às 12:09, UPSAI | Informática via lista <
lista em firebase.com.br> escreveu:

> Prezados
>
> Solicito ajuda para a seguinte ocorrência:
>
> Temos uma tabela chamada PEDIDOS e outra ITENS DO PEDIDO.
>
> Criamos a seguinte trigger:
>
> AS
>  declare variable aux double precision;
> begin
>    select NEW.codigo, sum(NEW.qtde)  from ITENS
>    group by NEW.codigo
>    INTO :AUX;
> end
>
> Estamos recebendo a seguinte mensagem de erro:
>
> can't format message 13:896 -- message file C:\firebird.msg not found.
> Dynamic SQL Error.
> SQL error code = -104.
> Cannot use an aggregate function in a GROUP BY clause.
>
>
> Saudações,
>  Wagner Aranha
>
>
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>


Mais detalhes sobre a lista de discussão lista