0% acharam este documento útil (0 voto)
19 visualizações2 páginas

12 Trigger Script

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
19 visualizações2 páginas

12 Trigger Script

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 2

--

-----------------------------------------------------------------------------------
----
-- FUNDAMENTOS DE BASE DE DADOS
-- Gatilhos (Triggers)
--
-- author: Francisco Pedro Morais Gonçalves
-- https://github.com/fgonca
--
-----------------------------------------------------------------------------------
----

/*EXERCÍCIO 1: Criação de um trigger que faz a redução automática da quantidade em


stock duma obra sempre que uma venda é realizada.*/

USE db03;

/*1- CRIAÇÃO DO TRIGGER*/

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

/*3.1- PRIMEIRO TESTE DO TRIGGER*/

INSERT INTO venda_obra (obra, qtd) values (1, 2);

SELECT * FROM obra;


SELECT * FROM venda_obra;

/*3.2- SEGUNDO TESTE DO TRIGGER*/

INSERT INTO venda_obra (obra, qtd) values (2, 15);

SELECT * FROM obra;


SELECT * FROM venda_obra;

-- ------------------------------------------------------------------------

/*4- EXCLUSÃO DO TRIGGER*/

DROP TRIGGER IF EXISTS reduz_quantidade;

-- -----------------------------------------------------------------------
/*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;

/*INICIALIZA COM OS ID DA TABELA OBRA*/


INSERT INTO totalvendido (obra, total) VALUES(1,0),(2,0),(3,0),(4,0);

/*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 ;

/* Efectua uma venda */


INSERT INTO venda_obra (obra, qtd) values (1, 3);

/* Efectua uma venda */


INSERT INTO venda_obra (obra, qtd) values (2, 4);

/* Verifica se os dados foram actualizados */


SELECT * FROM totalvendido;

/*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*/

Você também pode gostar