Refiz a trigger com a alteração de salario se o instrutor receber mais que 100% dos instrutores, alterando o salário para ficar igual ao maior salario registrado... mas estou errando no retorno.
create or replace function cria_instrutor() returns trigger as $$
declare
media_salarial decimal default 0;
instrutores_recebem_menos integer default 0;
total_instrutores integer default 0;
salario decimal default 0;
percentual decimal(5,2) default 0;
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.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;
if percentual = 100 then
return new.salario = (select instrutor.salario from instrutor order by salario desc limit 1);
insert into log_instrutores (informacao) values
(new.nome || ' teve o salario anterado para o teto da categoria = ' || new.salario);
return new;
else
insert into log_instrutores (informacao) values
(new.nome || ' recebe mais 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();
A alteração que fiz foi nessa parte
if percentual = 100 then
return new.salario = (select instrutor.salario from instrutor order by salario desc limit 1);
insert into log_instrutores (informacao) values
(new.nome || ' teve o salario anterado para o teto da categoria = ' || new.salario);
return new;
else
insert into log_instrutores (informacao) values
(new.nome || ' recebe mais que ' || percentual || '% da grade de instrutores');
RETURN NEW;
end if;
O resultado que recebo quando faço o insert into instrutor (nome, salario) values ('Tiago Oliveira', 1200);
ERROR: não pode retornar valor não-composto de função que retorna tipo composto CONTEXT: função PL/pgSQL cria_instrutor() linha 27 em RETURN SQL state: 42804