Skip to content

Commit 6b9851a

Browse files
committed
2 parents 0b6be52 + df52107 commit 6b9851a

File tree

6 files changed

+55
-0
lines changed

6 files changed

+55
-0
lines changed
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/PROCEDURE.sql

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,42 @@ BEGIN
116116
RETURN OLD;
117117
END;
118118
$$ LANGUAGE plpgsql;
119+
120+
121+
122+
CREATE OR REPLACE FUNCTION validar_personagem() RETURNS TRIGGER AS $$
123+
BEGIN
124+
125+
IF NEW.tipo = 'PC' THEN
126+
IF NOT EXISTS (SELECT 1 FROM PC WHERE id_personagem = NEW.id_personagem) THEN
127+
RAISE EXCEPTION 'Todo Personagem do tipo PC deve ter um registro correspondente na tabela PC';
128+
END IF;
129+
ELSIF NEW.tipo = 'NPC' THEN
130+
IF NOT EXISTS (SELECT 1 FROM NPC WHERE id_personagem = NEW.id_personagem) THEN
131+
RAISE EXCEPTION 'Todo Personagem do tipo NPC deve ter um registro correspondente na tabela NPC';
132+
END IF;
133+
END IF;
134+
135+
RETURN NEW;
136+
END;
137+
$$ LANGUAGE plpgsql;
138+
139+
140+
CREATE OR REPLACE FUNCTION validar_especializacao_personagem() RETURNS TRIGGER AS $$
141+
BEGIN
142+
143+
IF TG_TABLE_NAME = 'pc' THEN
144+
IF NOT EXISTS (SELECT 1 FROM Personagem WHERE id_personagem = NEW.id_personagem AND tipo = 'PC') THEN
145+
RAISE EXCEPTION 'Não é possível inserir um PC sem um registro correspondente na tabela Personagem';
146+
END IF;
147+
148+
149+
ELSIF TG_TABLE_NAME = 'npc' THEN
150+
IF NOT EXISTS (SELECT 1 FROM Personagem WHERE id_personagem = NEW.id_personagem AND tipo = 'NPC') THEN
151+
RAISE EXCEPTION 'Não é possível inserir um NPC sem um registro correspondente na tabela Personagem';
152+
END IF;
153+
END IF;
154+
155+
RETURN NEW;
156+
END;
157+
$$ LANGUAGE plpgsql;

src/TRIGGER.sql

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,19 @@ CREATE OR REPLACE TRIGGER trigger_respawn_inimigo
8787
AFTER DELETE ON InstanciaInimigo
8888
FOR EACH ROW
8989
EXECUTE FUNCTION respawn_inimigo();
90+
91+
CREATE TRIGGER trigger_validar_personagem
92+
BEFORE INSERT OR UPDATE ON Personagem
93+
FOR EACH ROW
94+
EXECUTE FUNCTION validar_personagem();
95+
96+
97+
CREATE TRIGGER trigger_validar_pc
98+
BEFORE INSERT OR UPDATE ON PC
99+
FOR EACH ROW
100+
EXECUTE FUNCTION validar_especializacao_personagem();
101+
102+
CREATE TRIGGER trigger_validar_npc
103+
BEFORE INSERT OR UPDATE ON NPC
104+
FOR EACH ROW
105+
EXECUTE FUNCTION validar_especializacao_personagem();

0 commit comments

Comments
 (0)