1
resposta

log_instrutores coluna informacao aparece como null

Olá, na aula 6 instrutores e salários, na tabela log_instrutores, a coluna informacao aparece como null, não consigo identificar meu erro, podem me ajudar por favor?

create table log_instrutores (
    id serial primary key,
    informacao varchar (255),
    momento_criacao timestamp default current_timestamp
);

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 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;
        
        if salario_instrutor > media_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;

select * from instrutor;

select cria_instrutor('Fulana de Tal', 1000);

select * from log_instrutores;

1	"Fulana de Talrecebe acima da média"	"2024-09-10 14:42:11.32948"
2		"2024-09-10 14:42:11.32948"
3	"Fulana de Tal recebe acima da média"	"2024-09-10 14:43:04.576057"
4		"2024-09-10 14:43:04.576057"
5	"Fulana de Tal recebe acima da média"	"2024-09-10 14:45:57.593074"
6		"2024-09-10 14:45:57.593074"
1 resposta

Olá, Mariana. Tudo bem?

Observei que a variável instrutores_recebem_menos está sendo declarada sem um valor padrão. Para garantir que o comportamento da função não seja afetado por valores indefinidos, recomendo que você defina um valor padrão de 0. A falta de um valor padrão pode influenciar nos resultados da função.

Por favor, atualize o código para o seguinte:

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 DEFAULT 0;
    total_instrutores INTEGER DEFAULT 0;
    salario DECIMAL;
    percentual DECIMAL;
    
    -- restante do código omitido

Faça essa alteração e veja se o problema é resolvido.

Espero ter ajudado! Fico à disposição para qualquer dúvida.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!