Fórum Store procedure #374379
31/08/2009
0
segue a sp
begin
if (exists(select data, sequencia from ped_sequencia where (data = :mdata))) then
begin
select sequencia from ped_sequencia where (data = :mdata) into msequencia;
i = gen_id(sequencia_pedido, -1*gen_id(sequencia_pedido,0));
i = gen_id(sequencia_pedido,msequencia);
update ped_sequencia
set sequencia = gen_id(sequencia_pedido,1)
where (data = :mdata);
end
else
begin
i = gen_id(sequencia_pedido, -1*gen_id(sequencia_pedido,0));
insert into ped_sequencia (
data,
sequencia)
values (
:Mdata,
gen_id(sequencia_pedido,1));
end
Select sequencia from ped_sequencia where (data = :mdata) into msequencia_out;
end
Ricardo54351060
Curtir tópico
+ 0Posts
01/09/2009
Emerson Nascimento
explique melhor para que serve esta stored procedure, como você dá o número para o pedido através do programa, etc.
essa SP é disparada na gravação? pq você precisa comparar a data?
não seria somente pegar o resultado do generator (com a funcção gen_id)?
Gostei + 0
01/09/2009
Ricardo54351060
quando vou gravar o pedido se for o primeiro pedido do dia a sp abre a tabela que tem apenas a data e o numero do pedido como campo e grava a data do dia e o numero do pedido, se ja tiver pedido no dia a sp apenas incrementa 1 no total de pedidos do dia sendo assim a numeracao dos meus pedidos fica
ped - data
1 01/09/2009
2 01/09/2009
1 31/08/2009
2 31/08/2009
3 31/08/2009
ou seja todo dia eu tenho pedido numero 1, porem qdo disparo a sp de 2 terminais sai para o erro
Gostei + 0
01/09/2009
Emerson Nascimento
pelo que você está mostrando essa SP é executada após a gravação, certo?
quais parâmetros são passados para a SP?
porque não usar um TRIGGER?
Gostei + 0
01/09/2009
Emerson Nascimento
Gostei + 0
01/09/2009
Ricardo54351060
eh feito a digitacao do pedido ( em memoria )
ao apertar o botao para gravar é disparado a sp e esta faz o seguinte:
pesquisa uma tabela chamada ped_sequencia nesta tabela eu tenho um campo data e outro pedido, se a sp encontrar a data no qual esta sendo feito o pedido ela incrementa 1 no campo pedido e retona este valor para o delphi poder incluir como NUMERO DO PEDIDO e gravar a capa e o item do pedido ou seja
antes do pedido ser gravado ele recebe um valor devolvido pela sp que é o numero do pedido que vem da tabela ped_sequencia
Gostei + 0
01/09/2009
Emerson Nascimento
veja essas duas formas:
sem generator:
begin if (not exists(select data from ped_sequencia where (data = :mdata))) then insert into ped_sequencia (data, sequencia) values (:Mdata, 0); select (sequencia+1) from ped_sequencia where (data = :mdata) into :msequencia_out; update ped_sequencia set sequencia = :msequencia_out where (data = :mdata); end
com generator:
begin if (not exists(select data from ped_sequencia where (data = :mdata))) then begin insert into ped_sequencia (data, sequencia) values (:Mdata, 1); execute statement ´set generator sequencia_pedido to 0´; end msequencia_out = gen_id(sequencia_pedido, 1); -- no caso de optar pelo uso de generator (que é mais seguro) -- o update abaixo é totalmente desnecessário update ped_sequencia set sequencia = :msequencia_out where (data = :mdata); end
Gostei + 0
01/09/2009
Ricardo54351060
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)