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

Minha solução - DESAFIO 2

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.

1 resposta
solução!

Opa, ótima solução, Matteo! Obrigado pelo retorno e parabéns pelo empenho. Bons estudos!