Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SET TERM ^ ;
- CREATE OR ALTER PROCEDURE BAIXANOLOTE (
- ID_PRODUTO INTEGER,
- QUANTIDADE NUMERIC(15,2))
- AS
- DECLARE variable LOTE INTEGER; /* ID do Lote a ser Baixado */
- DECLARE variable ESTOQUE_ATUAL_LOTE NUMERIC(15,2); /* Valor Atual do Estoque do Lote */
- DECLARE variable RESTA_ABATER NUMERIC(15,2); /* Valor Restante, resultante se tiver que abater do proximo ou não */
- DECLARE variable QUANTO_PODE_ABATER NUMERIC(15,2); /* Quanto no Lote pode abater */
- BEGIN
- resta_abater = :quantidade;
- while ( :resta_abater > 0) do
- BEGIN
- FOR SELECT es.lotenumero,es.lote_qtdcontrolada
- FROM lote es WHERE es.produto_id =:id_produto
- AND es.lote_qtdcontrolada > 0
- ORDER BY es.lote_val INTO :lote, :estoque_atual_lote
- do
- BEGIN
- quanto_pode_abater = :estoque_atual_lote - :resta_abater;
- IF (:quanto_pode_abater > 0) THEN
- BEGIN
- quanto_pode_abater = :resta_abater;
- resta_abater =0;
- END
- ELSE
- BEGIN
- quanto_pode_abater = :resta_abater -:estoque_atual_lote;
- quanto_pode_abater = :resta_abater - :quanto_pode_abater;
- resta_abater = :resta_abater - :quanto_pode_abater;
- END
- UPDATE lote es SET es.lote_qtdcontrolada =
- (es.lote_qtdcontrolada - :quanto_pode_abater)
- WHERE es.produto_id = :id_produto AND es.lotenumero = :lote ;
- END
- END
- END^
- SET TERM ; ^
- COMMENT ON PARAMETER BAIXANOLOTE.ID_PRODUTO IS
- 'Id do produto na tabela';
- COMMENT ON PARAMETER BAIXANOLOTE.QUANTIDADE IS
- 'Quantidade a ser descontada no lote';
- /* Following GRANT statetements are generated automatically */
- GRANT SELECT,UPDATE ON LOTE TO PROCEDURE BAIXANOLOTE;
- /* Existing privileges on this procedure */
- GRANT EXECUTE ON PROCEDURE BAIXANOLOTE TO SYSDBA;
- /* Triguer */
- SET SQL DIALECT 3;
- SET TERM ^ ;
- CREATE OR ALTER TRIGGER CADPRODUTOS_BAIXALOTE FOR CADPRODUTOS
- ACTIVE AFTER UPDATE POSITION 3
- AS
- DECLARE variable quantidade NUMERIC(15,2);
- DECLARE variable cont INT;
- BEGIN
- /* Trigger text */
- SELECT COUNT(*) FROM lote h WHERE h.produto_id = NEW.id INTO cont ;
- quantidade = 0;
- IF ( OLD.estq_total > NEW.estq_total ) THEN
- quantidade = OLD.estq_total - NEW.estq_total;
- IF (cont > 0) THEN
- EXECUTE PROCEDURE baixanolote( NEW.id,quantidade);
- END
- ^
- SET TERM ; ^
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement