Oi gente! vim compartilhar minha solução, demorou mas saiu =)
DROP FUNCTION cria_instrutor()
CREATE OR REPLACE FUNCTION cria_instrutor() RETURNS TRIGGER AS $$
DECLARE
media_salarial DECIMAL;
instrutores_recebem_menos INT DEFAULT 0;
total_instrutores INT DEFAULT 0;
salario DECIMAL;
maior_salario DECIMAL;
percentual DECIMAL (10,2);
BEGIN
SELECT AVG(instrutor.salario) INTO media_salarial FROM instrutor WHERE id <> NEW.id;
IF NEW.salario > media_salarial THEN
INSERT INTO log_instrutores (informacao) VALUES (NEW.nome || ' recebe acima da média!');
END IF;
FOR salario IN SELECT instrutor.salario FROM instrutor WHERE id <> NEW.salario 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;
IF percentual >= 100 THEN
SELECT MAX(instrutor.salario) INTO maior_salario FROM instrutor WHERE id <> NEW.id;
NEW.salario := maior_salario;
END IF;
INSERT INTO log_instrutores(informacao)
VALUES (NEW.nome||' recebe mais do que ' || percentual || '% da grade de instrutores. ');
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER cria_log_instrutores ON instrutor
CREATE TRIGGER cria_log_instrutores BEFORE INSERT ON instrutor
FOR EACH ROW EXECUTE FUNCTION cria_instrutor();
INSERT INTO instrutor (nome,salario) VALUES ('Fernando ', 600000);
Muito bom Vinicius!!!! Impecável o curso.