Store Procedure no Firebird
06/09/2018
0
preciso fazer uma store procedure, que varra estes itens e acerte a sequencia de cada item para mim exemplo
Pedido Sequencia Produto Total
1 1 TESTE 1 R$ 1.00
1 2 TESTE 1 R$ 1.00
1 3 TESTE 1 R$ 1.00
2 1 TESTE 1 R$ 1.00
2 2 TESTE 1 R$ 1.00
2 3 TESTE 1 R$ 1.00
Alguém teria um exemplo de como fazer isso, utilizo banco de dados Firebird;
Softsan Software
Posts
17/10/2018
Hélio Devmedia
17/10/2018
Emerson Nascimento
17/10/2018
André Henrique
abaixo eu criei uma stored procedure em SQL Server porque não manjo muito bem a criação da stored procedure em Firebird não, mas acredito que será simples a alteração para que funcione no Firebird. Eu considerei que a sua tabela de Itens possui um ID para cada registro. Caso não seja assim, troque o ORDER BY IdItem pelo campo que representa a descrição do seu item, por exemplo, ORDER BY DescricaoItem.
Eu primeiramente carrego todos os seus pedidos e através dele faço um while pesquisando os itens que compõem aquele pedido ordenando por ID. Logo em seguida, após a ordenação, faço um UpDate começando com a sequência 01, incrementando até o último item do pedido. Quando ele volta, a sequência será um de nova e assim rodará até que todos os pedidos cadastrados sejam finalizado.
CREATE PROCEDURE sp_AcertaSequenciaPedidoItens
AS
BEGIN
DECLARE @NumSequencia SMALLINT,
@NumeroPedido INTEGER,
@IdPedidoItem INTEGER
DECLARE PedidoCursor CURSOR FOR
SELECT NumeroPedido
FROM Pedido
ORDER BY NumeroPedido
OPEN PedidoCursor
FETCH NEXT FROM PedidoCursor INTO @NumeroPedido
WHILE @@FETCH_STATUS = 00
BEGIN
SET @NumSequencia = 01
DECLARE ItensPedidoCursor CURSOR FOR
SELECT IdPedidoItem
FROM ItensPedido
WHERE NumeroPedido = @NumeroPedido
ORDER BY IdItem /* Estou ordenando pelo ID do item para o caso de haver mais de um número de sequência repetido. */
OPEN ItensPedidoCursor
FETCH NEXT FROM ItensPedidoCursor INTO @IdPedidoItem
WHILE @@FETCH_STATUS = 00
BEGIN
UPDATE ItensPedido SET Sequencia = @NumSequencia
WHERE IdPedidoItem = @IdPedidoItem
SET @NumSequencia = @NumSequencia + 01
FETCH NEXT FROM ItensPedidoCursor INTO @IdPedidoItem
END
FETCH NEXT FROM PedidoCursor INTO @NumeroPedido
END
CLOSE PedidoCursor
DEALLOCATE PedidoCursor
END
Atenciosamente,
André Henrique
Clique aqui para fazer login e interagir na Comunidade :)