Store Procedure no Firebird

06/09/2018

5

Bom dia Pessoal, Possuo uma tabela de itens de pedido, onde tenho um campo chamado sequencia,
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

Softsan Software

Responder

Posts

17/10/2018

Hélio Devmedia

Tem como postar a estrutura do banco, ao menos uma parte dela?
Responder

17/10/2018

Emerson Nascimento

Se todos os campos de um mesmo pedido tiverem o mesmo conteúdo (como o exemplo passado) não tem como fazer.
Responder

17/10/2018

André Henrique

Boa tarde Softsan,

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
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar