1
resposta

Solução para o desafio

CREATE OR REPLACE FUNCTION cria_instrutor() RETURNS TRIGGER AS $$

    DECLARE
        media_salarial DECIMAL;
        instrutores_recebem_menos INTEGER DEFAULT 0;
        total_instrutores INTEGER DEFAULT 0;
        salario DECIMAL;
        **maior_salario DECIMAL DEFAULT 0**;
        percentual DECIMAL(5,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.id LOOP
            total_instrutores := total_instrutores + 1;

            **IF salario > maior_salario THEN
                maior_salario := salario;
            END IF;**

            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
            NEW.salario := maior_salario;
        END IF;**

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

        RETURN NEW;
    END;
$$ LANGUAGE plpgsql;
1 resposta

Oi, Guilherme, tudo bem?

Peço desculpas pela demora em retornar.

É isso aí! Parabéns pelo desenvolvimento do desafio, continue sempre se dedicando nos estudos.

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

Abraços!