Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Proposta de resolução (corrigindo o salário)

CREATE OR REPLACE FUNCTION cria_instrutor() RETURNS TRIGGER AS $$
    DECLARE
        maior_salario DECIMAL;
        media_salarial 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
            NEW.salario := maior_salario;
        END IF;

        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.id LOOP
            total_instrutores := total_instrutores + 1;

            IF NEW.salario > salario THEN
                instrutores_recebem_menos := instrutores_recebem_menos + 1;
            END IF;
        END LOOP;

        IF total_instrutores = 0 THEN
            percentual := 1 * 100;
        ELSE
            percentual := instrutores_recebem_menos::DECIMAL / total_instrutores::DECIMAL * 100;
        END IF;

        INSERT INTO log_instrutores (informacao)
            VALUES (new.nome || ' recebe mais do que ' || percentual || '% da grade de instutores');

        RETURN NEW;
    END;
$$ LANGUAGE plpgsql;

Pode ser executado no link do dbfiddle.

1 resposta
solução!

Oiê, tudo bem?

Peço desculpas pela demora em responder.

Parabéns pelo desenvolvimento do desafio! Além disso, obrigada por compartilhá-lo com o fórum e disponibilizar um link para acessar todo o processo de construção e utilização da função, gostei bastante!

Em caso de dúvidas, fico à disposição para auxiliar.

Um forte abraço!