Interbase - exemplo de usando triggers

Top  Previous  Next

// exemplo de 2 trigger... uma BEFORE INSERT e outra AFTER INSERT

// sao 2 tabelas: produtos e vendas.

// o objetivo da trigger BEFORE INSERT é impedir que sejam

// concluidos pedidos que possuam qtd de venda maior que a que tenha

// em estoque

// ja a trigger AFTER INSERT faz a baixa no estoque

 

CREATE EXCEPTION ESTOQUE_BAIXO 'Nao ha pecas destas suficientes no estoque!';

 

/* Tables definitions */

CREATE TABLE PRODUTOS (

    COD_PROD INTEGER NOT NULL,

    NOM_PROD VARCHAR (30NOT NULL,

    VALOR1 NUMERIC (102),

    QTD INTEGER);

 

CREATE TABLE VENDA (

    COD_PROD INTEGER NOT NULL,

    QTD INTEGER);

 

/* Unique keys definition */

ALTER TABLE PRODUTOS ADD CONSTRAINT PK_PRODUTOS PRIMARY KEY (COD_PROD);

/* Foreign keys definition */

ALTER TABLE VENDA ADD  CONSTRAINT FK_VENDA FOREIGN KEY (COD_PROD) REFERENCES 

PRODUTOS (COD_PROD);

 

SET TERM ^ ;

/* Triggers definition */

/* Trigger: VENDA_AI */

CREATE TRIGGER VENDA_AI FOR VENDA ACTIVE

AFTER INSERT POSITION 0

AS

BEGIN

  UPDATE PRODUTOS SET QTD = QTD - NEW.QTD

  WHERE PRODUTOS.cod_prod = NEW.cod_prod;

END

^

/* Trigger: VENDA_BI */

CREATE TRIGGER VENDA_BI FOR VENDA ACTIVE

BEFORE INSERT POSITION 0

AS

declare variable Q INTEGER;

BEGIN

  SELECT QTD FROM PRODUTOS WHERE PRODUTOS.cod_prod = NEW.cod_prod

  INTO :Q;

  BEGIN

    IF (:Q - NEW.qtd < 0) then

      EXCEPTION ESTOQUE_BAIXO; -- excecao que mostra uma mensagem especifica

  END

END

^

SET TERM ; ^