@@ -118,40 +118,31 @@ END;
118118$$ LANGUAGE plpgsql;
119119
120120
121-
122121CREATE OR REPLACE FUNCTION validar_personagem () RETURNS TRIGGER AS $$
123122BEGIN
124-
123+ -- Se o tipo for PC, insere na tabela PC se não existir
125124 IF NEW .tipo = ' PC' THEN
126125 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 ' ;
126+ INSERT INTO PC (id_personagem) VALUES ( NEW . id_personagem ) ;
128127 END IF;
128+
129+ -- Garante exclusividade: impede que um personagem PC esteja na tabela NPC
130+ IF EXISTS (SELECT 1 FROM NPC WHERE id_personagem = NEW .id_personagem ) THEN
131+ RAISE EXCEPTION ' Personagem do tipo PC não pode estar na tabela NPC' ;
132+ END IF;
133+
134+ -- Se o tipo for NPC, insere na tabela NPC se não existir
129135 ELSIF NEW .tipo = ' NPC' THEN
130136 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 ' ;
137+ INSERT INTO NPC (id_personagem) VALUES ( NEW . id_personagem ) ;
132138 END IF;
133- END IF;
134-
135- RETURN NEW;
136- END;
137- $$ LANGUAGE plpgsql;
138139
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' ;
140+ -- Garante exclusividade: impede que um personagem NPC esteja na tabela PC
141+ IF EXISTS (SELECT 1 FROM PC WHERE id_personagem = NEW .id_personagem ) THEN
142+ RAISE EXCEPTION ' Personagem do tipo NPC não pode estar na tabela PC' ;
152143 END IF;
153144 END IF;
154-
145+
155146 RETURN NEW;
156147END;
157- $$ LANGUAGE plpgsql;
148+ $$ LANGUAGE plpgsql;
0 commit comments