Pergunta

How to detect which event fired the trigger in firebird? I know using postgres i can do something like this:

  IF (TG_OP = 'INSERT') THEN
    update produto set produtoquantidade = produtoquantidade - NEW.pedidoitemquantidade where produtocodigo = NEW.pedidoitemprodutocodigo AND produtoquantidade is not null;
  ELSIF (TG_OP = 'DELETE') THEN
    update produto set produtoquantidade = produtoquantidade + OLD.pedidoitemquantidade where produtocodigo = OLD.pedidoitemprodutocodigo AND produtoquantidade is not null;
  ELSE
    /* No UPDATE, verifica se o cara aumentou ou diminuiu a quantidade, nesse caso vai ter q diminuir ou aumentar o estoque, respectivamente. */
    IF (NEW.pedidoitemquantidade > OLD.pedidoitemquantidade) THEN
      /* O USUARIO AUMENTOU A QUANTIDADE DO ITEM */
      update produto set produtoquantidade = produtoquantidade - (NEW.pedidoitemquantidade - OLD.pedidoitemquantidade) where produtocodigo = NEW.pedidoitemprodutocodigo AND produtoquantidade is not null;
    ELSE
      /* O USUARIO DIMINUIU A QUANTIDADE DO ITEM */
      update produto set produtoquantidade = produtoquantidade + (OLD.pedidoitemquantidade - NEW.pedidoitemquantidade) where produtocodigo = NEW.pedidoitemprodutocodigo AND produtoquantidade is not null;
    END IF;
  END IF;

What about firebird? Can i do something like this?

Foi útil?

Solução

Have a look here

if (inserting and new.id is null)
then new.id = gen_id(gen_partrec_id, 1);

See: Multi-action triggers

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top