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

[Dúvida] Não aparece a mensagem do RAISE NOTICE

Boa tarde! Não sei dizer ao certo aonde está o erro porem eu estava tentando implementar o RAISE NOTICE mas não consigo fazer com que a noticia apareça no terminal do PostgreSQL.

Estou usando o CREATE da seguinte forma:

CREATE OR REPLACE FUNCTION funcionarios.cria_instrutor () RETURNS TRIGGER AS $$ 
    DECLARE
        media_salarial DECIMAL;
        instrutores_recebem_menos INTEGER DEFAULT 0;
        total_instrutores INTEGER DEFAULT 0;
        salario DECIMAL;
        percentual DECIMAL (5, 2);
    BEGIN
        
        SELECT AVG(funcionarios.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 funcionarios.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;
        
        INSERT INTO funcionarios.log_instrutores (informacao, teste)
            VALUES (NEW.nome || ' recebem mais do que ' || percentual || '% da grade de instrutores', '');
            
            RETURN NEW;
    EXCEPTION
        WHEN undefined_column THEN
            RAISE NOTICE 'mensagem de teste';
            RETURN NEW;
    END;
$$ LANGUAGE plpgsql;

Acredito que algo relacionado ao schema que esteja gerando esse conflito já que usei também o mesmo script do material (adaptando para usar com o schema) e tive o mesmo resultado que é uma mensagem de executado com sucesso "INSERT 0 1

Query returned successfully in 65 msec."

1 resposta
solução!

Consegui resolver, caso alguém venha a ter o mesmo problema vi que estava com um pequeno problema em duas linhas:

SELECT AVG(funcionarios.instrutor.salario) INTO media_salarial FROM instrutor WHERE id <> NEW.id;

e

FOR salario IN SELECT funcionarios.instrutor.salario FROM instrutor WHERE id <> NEW.id LOOP
            total_instrutores := total_instrutores + 1;

Em ambos o FROM ficou sem o schema funcionarios, após ajustar isso e atualizar a trigger para:

CREATE TRIGGER cria_log_instrutores AFTER INSERT ON funcionarios.instrutor
    FOR EACH ROW 
    EXECUTE FUNCTION funcionarios.cria_instrutor();

Consegui exibir a mensagem.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software