1
resposta

Minha resposta DESAFIO 2

/* 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();
1 resposta

Oi, Lucas!! Tudo certo?

Peço desculpas pela demora em retornar.

Mandou super bem na resolução do desafio! Gostei de como organizou a função, bem como da mensagem que é inserida na tabela log_instrutores ao tentar inserir um novo instrutor com salário acima de 100%.

Continue sempre se dedicando, em casos de dúvidas, fico à disposição.

Abraços!