/* Caso o instrutor inserido receba mais do que 100% dos instrutores existentes,
modifique a inserção para que ele passe a receber o mesmo que o instrutor mais bem pago*/
CREATE OR REPLACE FUNCTION cria_instrutor()
RETURNS TRIGGER
AS $$
DECLARE
maior_salario DECIMAL;
instrutores_recebem_menos INTEGER DEFAULT 0;
total_instrutores INTEGER DEFAULT 0;
salario DECIMAL;
percentual DECIMAL(5,2);
BEGIN
SELECT MAX(instrutor.salario) INTO maior_salario FROM instrutor WHERE id <> NEW.id;
IF NEW.salario > maior_salario THEN
INSERT INTO log_instrutores (informacao) VALUES (NEW.nome || ' receberia acima do maior salário. Salário autorizado: ' || maior_salario);
NEW.salario := maior_salario;
RETURN NEW;
ELSE
FOR salario IN SELECT instrutor.salario FROM instrutor WHERE id <> NEW.id LOOP
total_instrutores := total_instrutores + 1;
IF NEW.salario > salario THEN
instrutores_recebem_menos := instrutores_recebem_menos + 1;
END IF;
END LOOP;
percentual = instrutores_recebem_menos::DECIMAL / total_instrutores::DECIMAL * 100;
INSERT INTO log_instrutores (informacao)
VALUES (NEW.nome || ' recebe mais do que ' || percentual || '% da grade de instrutores');
RETURN NEW;
END IF;
END $$
LANGUAGE plpgsql;
CREATE TRIGGER cria_log_instrutores BEFORE INSERT ON instrutor
FOR EACH ROW EXECUTE FUNCTION cria_instrutor();