Ir para conteúdo
Fórum Script Brasil
  • 0

Function Update - Postgres


Marcio Albino

Pergunta

Sou novo com o postgres e quero fazer uma função bem simples, na qual tenho uma tabela com campos qtd (quantidade fisica), qtd_reservada e qtd_livre, e desejo que de acordo com insert ou alteração no campo no quantidade reservada seja feito um update no campo qtd_livre com a diferença entre qtd - qtd_reservada, porem não ta funcionando, essa tabela ta num esquema chamado master.

Segue em anexo minha função e a trigger

CREATE OR REPLACE FUNCTION fnc_calc_estoque_livre ()
RETURNS TRIGGER AS
$BODY$

BEGIN
 
    UPDATE master.alm_estoque SET qtd_livre = (qtd - qtd_reservada);                       
   
  RETURN NEW;
END
$BODY$
  LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION fnc_calc_estoque_livre(integer) OWNER TO postgres;

    
-------------------------------------------------------------------------------------------------------
CREATE TRIGGER trigger_calc_estoque AFTER INSERT OR DELETE
    ON master.alm_estoque FOR EACH ROW
 
    EXECUTE PROCEDURE fnc_calc_estoque_livre();

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Fiz algumas mudanças, porem agora a função entra em loop

CREATE OR REPLACE FUNCTION master.fnc_calc_estoque_livre()
  RETURNS "trigger" AS
$BODY$

BEGIN
 
    UPDATE master.alm_estoque SET qtd_livre = (qtd - qtd_reservada);                     
  RETURN NEW;
END
$BODY$
  LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION master.fnc_calc_estoque_livre() OWNER TO postgres;

 

Link para o comentário
Compartilhar em outros sites

  • 0

Eu testei aqui e funcionou pra mim deste modo:

 

CREATE or REPLACE FUNCTION fnc_calc_estoque_livre()
RETURNS boolean AS $$

BEGIN

UPDATE master.alm_estoque SET qtd_livre = (qtd - qtd_reservada);

        IF FOUND THEN
                RETURN TRUE;
        ELSE
                RETURN FALSE;
        END IF;

END

$$ LANGUAGE 'plpgsql';


 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...