-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtriggers_clinica_vet.sql
More file actions
71 lines (52 loc) · 2.86 KB
/
triggers_clinica_vet.sql
File metadata and controls
71 lines (52 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
-- Criação de triggers para banco de dados clínica veterinária
-- Tabelas criadas para armazenar informações dos triggers: novo_pagamento e peso_anterior
-- Triggers: tr_add_pagamento e tr_alter_peso
-- Schema a ser utilizado
USE db_clinica_vet;
-- Trigger BEFORE que armazena valor de pagamento novo após inserí-lo na tabela pagamento
-- Também inclui um id_novo de cada pagamento, data, hora e usuário que registrou novo pagamento
-- Tabela que irá armazenar novo pagamento
CREATE TABLE novo_pagamento (
id_novo INT NOT NULL AUTO_INCREMENT,
valor_pagamento DECIMAL (5,2) NOT NULL,
data_pagamento DATE NOT NULL,
hora_pagamento TIME NOT NULL,
usuario_pagamento VARCHAR (50) NOT NULL,
PRIMARY KEY (id_novo)
);
-- Criação do trigger que irá armazenar na tabela novo_pagamento o valor do pagamento após inserção de registro na tabela pagamento
CREATE TRIGGER `tr_add_pagamento`
BEFORE INSERT ON `pagamento`
FOR EACH ROW
INSERT INTO `novo_pagamento` (valor_pagamento, data_pagamento, hora_pagamento, usuario_pagamento)
VALUES (NEW.valor_pagamento, CURRENT_DATE(), CURRENT_TIME(), USER());
-- Exemplo de inserção de novo pagamento
INSERT INTO pagamento (data_consulta, id_cliente, valor_pagamento, forma_pagamento) VALUES ("2023-04-19", 2, 80, "CD");
-- Como chamar a tabela novo_pagamento e ver o que foi inserido
SELECT * FROM novo_pagamento;
---------------------------------------------------------------------------------------------------------------------------------------
-- Trigger que armazena peso anterior do animal depois que o altera na tabela paciente
-- Também inclui id_paciente, nome_paciente, id_cliente, data, hora e usuário que fez última atualização
-- Tabela que irá armazenar o peso anterior do animal
-- Uso de um id_alteracao, pois assim fica possível alterar mais de uma vez o peso do mesmo animal não usando id_paciente como PK
CREATE TABLE peso_anterior (
id_alteracao INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
id_paciente INT NOT NULL,
nome_paciente VARCHAR (50) NOT NULL,
id_cliente INT NOT NULL,
peso DECIMAL (5,2) NOT NULL,
data_alteracao DATE NOT NULL,
hora_alteracao TIME NOT NULL,
usuario_alteracao VARCHAR(50) NOT NULL
);
-- Criação do trigger que irá armazenar na tabela peso_anterior o peso após modificação
CREATE TRIGGER `tr_alter_peso`
AFTER UPDATE ON `paciente`
FOR EACH ROW
INSERT INTO `peso_anterior` (id_paciente, nome_paciente, id_cliente, peso, data_alteracao, hora_alteracao, usuario_alteracao)
VALUES (OLD.id_paciente, OLD.nome_paciente, OLD.id_cliente, OLD.peso, CURRENT_DATE(), CURRENT_TIME(), USER());
-- Exemplo de modificação de peso para determinado id_paciente
UPDATE paciente SET peso = 8.5 WHERE id_paciente = 1;
-- Como chamar a tabela peso_anterior e ver o peso anterior que foi armazenado após modificação
SELECT * FROM peso_anterior;
-- End of file.