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 (30) NOT NULL, VALOR1 NUMERIC (10, 2), 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 ; ^ |