1
resposta

[Projeto] Minha solução para o desafio 2

Tentei simplificar e fazer sem o FOR, pensando também em performance.

obs: Usei uma tabela "funcionarios" em analogia à tabela "instrutores"

CREATE OR REPLACE FUNCTION altera_salario() RETURNS TRIGGER AS $$ 
    DECLARE
        maior_salario DECIMAL;
        salario_acima DECIMAL;
    BEGIN
        SELECT MAX(funcionarios.salario) FROM funcionarios WHERE id <> NEW.id INTO maior_salario;

        IF NEW.salario > maior_salario THEN
            salario_acima := NEW.salario;
            NEW.salario := maior_salario;

            INSERT INTO log_funcionarios (info) VALUES (NEW.nome || ' receberia mais do que 100% dos funcionarios, por isso o salário que seria de '|| salario_acima ||' foi alterado para '|| maior_salario ||'.');

            RETURN NEW;
        ELSE
            RETURN NEW;
        END IF;
    END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER tg_altera_salario BEFORE INSERT ON funcionarios
    FOR EACH ROW EXECUTE FUNCTION altera_salario();
1 resposta

Oi, Marcos! Como vai?

Desde já, peço desculpas pela demora em retornar.

Mandou super bem na resolução do desafio! Gostaria de dizer que adorei como você resolveu o problema: além de usar a criatividade e criar uma tabela diferente para realização das atividades, você desenvolveu uma mensagem de log bastante descritiva.

Continue estudando e se dedicando, estarei aqui para te ajudar em caso de dúvidas.

Abraços!