Pegar o dados do registro anterior para comparar com o registro atual
Galera, estou precisado de ajuda para fazer um auditoria em uma tabela.
Firebird 2.5
tenho a seguinte os seguinte campos:
[img]http://arquivo.devmedia.com.br/forum/imagem/267272-20151027-090959.jpg[/img]
estoq_id,
prod_id,
estoq_anterior,
estoq_entrada,
estoq_saida,
estoq_atual
preciso fazer um select ou procedure para percorrer esses registro e analisar se o estoq_atual do registro anterior é igual com o estoq_atual do registro em foco, pois a tabela estoque ele pega o estoque estoq_atual do registro antigo para poder realizar o próximo movimento, ex:
Firebird 2.5
tenho a seguinte os seguinte campos:
[img]http://arquivo.devmedia.com.br/forum/imagem/267272-20151027-090959.jpg[/img]
estoq_id,
prod_id,
estoq_anterior,
estoq_entrada,
estoq_saida,
estoq_atual
preciso fazer um select ou procedure para percorrer esses registro e analisar se o estoq_atual do registro anterior é igual com o estoq_atual do registro em foco, pois a tabela estoque ele pega o estoque estoq_atual do registro antigo para poder realizar o próximo movimento, ex:
estoq_atual = (estoq_anterior(estoque atual do registro anterior "estoq_id") + estoq_entrada) - estoq_saida
Sidney Abreu
Curtidas 0
Respostas
Marcos P
27/10/2015
Embora a lógica de leitura sequencial de registros não seja algo muito recomendável em qualquer SGBDr, o ideal seria você fazer uma única query e tratar isso do lado de uma aplicação qualquer, para fazer esse controle você irá necessitar de um CURSOR no Firebird.
A ideia é simples : crie uma query que selecione todos os registros que você precisa ( devidamente ordenados ) e declare o cursor com ela. Depois, através de um loop, varra sequencialmente esses registros e implemente a lógica que você precisa.
Segue a sintaxe básica de criação de um cursor no firebird : Criando Cursor no Firebird.
Com uma pesquisa se 5 minutos no Google você acha muitos outros exemplos.
Ok ?!?
A ideia é simples : crie uma query que selecione todos os registros que você precisa ( devidamente ordenados ) e declare o cursor com ela. Depois, através de um loop, varra sequencialmente esses registros e implemente a lógica que você precisa.
Segue a sintaxe básica de criação de um cursor no firebird : Criando Cursor no Firebird.
Com uma pesquisa se 5 minutos no Google você acha muitos outros exemplos.
Ok ?!?
GOSTEI 0
Sidney Abreu
27/10/2015
Amigo, o que vc me aconselha para ter um histórico das movimentações do estoque? Sou iniciante
GOSTEI 0
Marcos P
27/10/2015
Não entendi sua pergunta... poderia explicar melhor ?
GOSTEI 0
Sidney Abreu
27/10/2015
Me refiro a estrutura, se a estrutura que eu criei esta correta
GOSTEI 0
Marcos P
27/10/2015
Não conheço sua necessidade, os detalhes de sua estrutura e da lógica que vai ser implementada sobre essa estrutura.
Então, fica difícil de opinar !
A única dica que darei a você, apenas como um parâmetro para sua análise, é a de considerar a evolução do tamanho dessa tabela de movimentação ao longo do tempo.
Quantas operações diárias são realizadas atualmente ?
Quais as perspectivas de evolução do número de operações diárias ?
Qual o tamanho estimado para essa tabela no decorrer do tempo ?
Qual a necessidade de armazenar essas informações ao longo do tempo ?
Existem requisitos legais a serem atendidos que justifiquem armazenar esses dados por determinado tempo ou sua necessidade é "apenas" funcional ?
Qual a estratégia ( ou estratégias ) de movimentação desses registros a medida que o tempo for passando ?
Tudo sempre parece simples no começo, mas, avaliando as coisas em detalhes... surgem as questões relevantes !
Então, fica difícil de opinar !
A única dica que darei a você, apenas como um parâmetro para sua análise, é a de considerar a evolução do tamanho dessa tabela de movimentação ao longo do tempo.
Quantas operações diárias são realizadas atualmente ?
Quais as perspectivas de evolução do número de operações diárias ?
Qual o tamanho estimado para essa tabela no decorrer do tempo ?
Qual a necessidade de armazenar essas informações ao longo do tempo ?
Existem requisitos legais a serem atendidos que justifiquem armazenar esses dados por determinado tempo ou sua necessidade é "apenas" funcional ?
Qual a estratégia ( ou estratégias ) de movimentação desses registros a medida que o tempo for passando ?
Tudo sempre parece simples no começo, mas, avaliando as coisas em detalhes... surgem as questões relevantes !
GOSTEI 0
Sidney Abreu
27/10/2015
Quantas operações diárias são realizadas atualmente ?
R= 200 em média
Quais as perspectivas de evolução do número de operações diárias ?
R= 50%
Qual o tamanho estimado para essa tabela no decorrer do tempo ?
R= cerca de 500.000,00 registros
Qual a necessidade de armazenar essas informações ao longo do tempo ?
R= auditoria do estoque
Existem requisitos legais a serem atendidos que justifiquem armazenar esses dados por determinado tempo ou sua necessidade é "apenas" funcional ?
R= sim, não se é apenas funcional. Mas uma forma de ter o registro para comparar os dados
Qual a estratégia ( ou estratégias ) de movimentação desses registros a medida que o tempo for passando ?
Não pensei nisso
R= 200 em média
Quais as perspectivas de evolução do número de operações diárias ?
R= 50%
Qual o tamanho estimado para essa tabela no decorrer do tempo ?
R= cerca de 500.000,00 registros
Qual a necessidade de armazenar essas informações ao longo do tempo ?
R= auditoria do estoque
Existem requisitos legais a serem atendidos que justifiquem armazenar esses dados por determinado tempo ou sua necessidade é "apenas" funcional ?
R= sim, não se é apenas funcional. Mas uma forma de ter o registro para comparar os dados
Qual a estratégia ( ou estratégias ) de movimentação desses registros a medida que o tempo for passando ?
Não pensei nisso
GOSTEI 0
Marcos P
27/10/2015
A definição da estrutura é tua e se você consegue implementá-la para atender teus requisitos, vá em frete com ela !
O volume de dados e a evolução dos mesmos ( embora você não definido em quanto tempo isso será alcançado ), não parece nada muito crítico !
Fique atento, também, a arquitetura de chaves e índices dessas tabelas, bem como a performance do Firebird quanto a concorrência de acesso a esses dados.
Não tenha muitas expectativas no sentido de que existe uma solução "ideal" para as coisas... a melhor solução é sempre aquela que você consegue entender, explicar e aplicar !
Boa sorte !
O volume de dados e a evolução dos mesmos ( embora você não definido em quanto tempo isso será alcançado ), não parece nada muito crítico !
Fique atento, também, a arquitetura de chaves e índices dessas tabelas, bem como a performance do Firebird quanto a concorrência de acesso a esses dados.
Não tenha muitas expectativas no sentido de que existe uma solução "ideal" para as coisas... a melhor solução é sempre aquela que você consegue entender, explicar e aplicar !
Boa sorte !
GOSTEI 0
Sidney Abreu
27/10/2015
O que devo estudar para melhor isso?
GOSTEI 0
Marcos P
27/10/2015
Engenharia de software...
Banco de dados...
Modelagem de negócios...
Requisitos legais...
Programação...
Enfim... tudo !
Não se preocupe.. se você tem essa preocupação de melhorar, a prática vai lhe indicar o caminho !
Banco de dados...
Modelagem de negócios...
Requisitos legais...
Programação...
Enfim... tudo !
Não se preocupe.. se você tem essa preocupação de melhorar, a prática vai lhe indicar o caminho !
GOSTEI 0
Sidney Abreu
27/10/2015
obrigado amigo
GOSTEI 0