12 Trigger Script
12 Trigger Script
-----------------------------------------------------------------------------------
----
-- FUNDAMENTOS DE BASE DE DADOS
-- Gatilhos (Triggers)
--
-- author: Francisco Pedro Morais Gonçalves
-- https://github.com/fgonca
--
-----------------------------------------------------------------------------------
----
USE db03;
DELIMITER $$
CREATE TRIGGER reduz_quantidade
BEFORE INSERT ON venda_obra
FOR EACH ROW BEGIN
UPDATE obra
SET qtd_stock = (qtd_stock - NEW.qtd) WHERE obra.id = NEW.obra;
END $$
DELIMITER ;
-- author: Prof. Msc. Hugo Dias Dos Santos
-- ------------------------------------------------------------------------
-- -----------------------------------------------------------------------
/*EXERCÍCIO 2: Criação de um trigger que guarda em uma tabela totalvendido o valor
em kwanza do total vendido de cada obra e a sua ultima actualização.*/
/*CRIA A TABELA*/
CREATE TABLE totalvendido (
obra INT NOT NULL,
total DECIMAL(8,2),
data_hora DATETIME,
PRIMARY KEY (obra),
FOREIGN KEY (obra) REFERENCES obra (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET utf8mb4;
/*VERIFICA A TABELA*/
SELECT * FROM totalvendido;
/*CRIA O TRIGGER*/
DELIMITER $$
CREATE TRIGGER actualiza_total
BEFORE INSERT ON venda_obra
FOR EACH ROW BEGIN
UPDATE totalvendido
SET total = (total + NEW.qtd*(SELECT preco FROM obra WHERE id = NEW.obra)),
data_hora=now() WHERE totalvendido.obra = NEW.obra;
END $$
DELIMITER ;
/*Descarta o gatilho*/
DROP TRIGGER IF EXISTS actualiza_total;
-- ----------------------------------------------------------------------
-- TRABALHO EM GRUPO
-- ----------------------------------------------------------------------
/*EXERCÍCIO 3: Criação de um trigger que faz a redução automática da quantidade em
stock duma obra sempre que uma venda é realizada,
e guarda em uma tabela totalvendido o valor em kwanza do total vendido de cada obra
e a sua ultima actualização.*/
-- ----------------------------------------------------------------------
/*EXERCÍCIO 4: Pretende-se desenvolver um software para controle de stock e das
vendas duma loja.
Um funcionário pode vender vários produtos e um produto é vendido por vários
funcionários.
O sistema deve actualizar automaticamente a quantidade de produtos em stock, depois
duma venda. Deve também actualizar automaticamente
o número e o valor das vendas efectuadas por cada funcionário, bem como o momento
da última venda.
O funcionário tem número (único), nome e data de nascimento. O produto tem código,
descrição, preço e quantidade em stock.
O sistema não deve permitir númenos negativos como quantidades em stock*/