Oi!
Fiz o treinamento "PostgreSQL: desenvolva com PL/pgSQL" e tive um erro no exercício da última aula.
Exercício:
/**
- Inserir instrutores (com salários).
- Se o salário for maior do que a média, salvar um log.
- Salvar outro log dizendo que fulano recebe mais do que X% da grade de instrutores. */
Depois de criar a tabela de logs fiz a seguinte função:
create or replace function cria_instrutor(nome_instrutor varchar, salario_instrutor decimal) returns void as $$
declare
id_instrutor_inserido integer;
media_salarial decimal;
instrutores_recebem_menos integer;
total_instrutores integer;
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;
if salario_instrutor > merdia_salarial then
insert into log_instrutores (informacao) values (nome_instrutor || ' recebe acima da média');
end if;
for salario in select instrutor.salario from instrutor where id <> id_instrutor_inserido loop
total_instrutores := total_instrutores + 1;
if salario_instrutor > 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 (nome_instrutor || ' recebe mais do que ' || percentual || '% da grade de instrutores');
end;
$$ language plpgsql;
Aí executei e verifiquei os resultados:
select cria_instrutor ('Fulana de tal', 1000);
select * from instrutor i ;
select * from log_instrutores ;
Me parece que ficou igual a do professor, mas não insere o segundo log, os resultados ficaram assim:
Alguém sabe me dizer no que eu errei?