1
resposta

[Sugestão] Solução do exericio sem o FOR para percentual da grade

Solução do exercicio sem o FOR para o percentual de grade. Sei que ha duas querys recuperando dados do SGBD, mas assim fica mais simples e mais rapido.

-- Solução do exercicio sem o FOR para percentual da grade
CREATE OR REPLACE FUNCTION cria_instrutor2 (nome_instrutor VARCHAR, salario_instrutor DECIMAL) RETURNS void AS $$
    DECLARE
        id_instrutor_inserido INTEGER;
        media_salarial DECIMAL;
        instrutores_recebem_menos INTEGER DEFAULT 0;
        total_instrutores INTEGER DEFAULT 0;
        salario DECIMAL;
        percentual DECIMAL;
    BEGIN
        INSERT INTO instrutor (nome, salario) VALUES (nome_instrutor, salario_instrutor) RETURNING id INTO id_instrutor_inserido;
        SELECT AVG(instrutor.salario) INTO media_salarial FROM instrutor WHERE id <> id_instrutor_inserido; -- calcula a media dos salarios

        IF salario_instrutor > media_salarial THEN
            INSERT INTO log_instrutores (informacao) values (nome_instrutor || ' recebe acima da media.');
        END IF;

        -- Salvar outro log dizendo que fulano recebe mais do que X% da grade de instrutores. AQUI ESTA O CODIGO QUE SUBSTITUI O LOOP
        SELECT COUNT(*) INTO total_instrutores FROM instrutor WHERE id <> id_instrutor_inserido; 
        SELECT COUNT(*) INTO instrutores_recebem_menos FROM instrutor WHERE id <> id_instrutor_inserido AND salario_instrutor > salario; 
        
        percentual = instrutores_recebem_menos::DECIMAL / total_instrutores::DECIMAL * 100;

        INSERT INTO log_instrutores (informacao) values (nome_instrutor || ' recebe mais do que ' || ROUND(percentual,2) ||'% da grade de instrutores.');
    END;
$$ LANGUAGE plpgsql;
1 resposta

Oii, Ceilton! Tudo bom?

Obrigada por trazer outra forma de fazer o exercício! Não tenho dúvidas que ajudará outros(as) colegas que estejam estudando o mesmo conteúdo.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!