[firebase-br]RES: Em Rede sera que não da pau ?

Anderson Oliveira Furtilho andersonfurtilho em gmail.com
Qui Nov 8 15:03:58 -03 2007


Olá amigos
eu declarei uma variavel integer e estou fazendo assim

 /* Gerar Entrada_Material */
        INSERT INTO ENTRADA_MATERIAL
        (SEQUENCIAL_CIDADES, DATA_ENTRADA,
        SEQUENCIAL_FUNCIONARIOS, SEQUENCIAL_FORNECEDORES,
        SEQUENCIAL_TRANSPORTADORAS, TIPO_ENTRADA)
        VALUES
        (:SEQUENCIAL_CIDADES_P, CURRENT_DATE,
        :SEQUENCIAL_FUNCIONARIOS_P, :SEQUENCIAL_FORNECEDORES_P,
        :SEQUENCIAL_TRANSPORTADORAS_P, 'A')


RETURNING
         SEQUENCIAL_ENTRADA_MATERIAL INTO :SEQUENCIAL_ENTRADA_MATERIAL_V;



        /* Gerar Entrada_Material_Detalhe */
        INSERT INTO ENTRADA_MATERIAL_DETALHE
        (SEQUENCIAL_PRODUTOS,QUANTIDADE,SEQUENCIAL_TIPO_UNIDADES,
        VALOR_UNITARIO, VALOR_TOTAL, SEQUENCIAL_ENTRADA_MATERIAL,
        DATA_ENTRADA) VALUES
        (:SEQUENCIAL_PRODUTOS_V,
        :QUANTIDADE_P, :SEQUENCIAL_TIPO_UNIDADES_V,
        :VALOR_UNITARIO_V, (:QUANTIDADE_P * :VALOR_UNITARIO_V),



:SEQUENCIAL_ENTRADA_MATERIAL_V,



        CURRENT_DATE);


Como podem ver agora pego o retorno do generator usado quando gravou o 
master e guardo numa var

e dou insert nos details usando esta var.


Assim posso rodar este comando numa procedure em varias maquinas ao mesmo 
tempo assim nunca vai acontecer
de os details pegar o generator errado.

Valeu amigos


"Ezequiel Pianegonda" <epianegonda em gmail.com> 
escreveu na mensagem 
news:84db527a0711080833qca96f0aqbb48a07f3e51247 em mail.gmail.com...
e se vc fizer o seguinte na tua procedure:
codigo=gen_id(generator, 1);
e usar codigo ao invés de gen_id(generator, 0) não vai resolver o problema??

Ezequiel

Em 08/11/07, Magno System <magno em speet.com.br> 
escreveu:
>
> Caro Anderson. Se você não quer que os generators se repitam você deve por
> GEN_ID(Nome da Generator, 1). Ou seja, para cada requisição da generator
> ele
> acumula 1. Desta forma o generator nunca vai se repetir, pois, por mais
> sincronizada que seja duas requisições por exemplo o FIREBIRD só terá
> condição de atender uma de cada vez. Aí fica IMPOSSÍVEL 2 códigos iguais
> até
> porque o incremento de generators não depende de transações, ou seja,
> mesmo
> que haja um rollback o generator é incrementado.
>
> EMPRESA: Marcelo Guimarães Nogueira
> NOME FANTASIA: Magno System
> ENDEREÇO: Rua Oliveira Leite, 66 - Centro - Passa Quatro - MG
> EMAIL: magno em speet.com.br
> CNPJ: 07.693.076/0001-99
>
> Marcelo Guimarães Nogueira
> Magno System (Empresa Desenvolvedora de Software)
> ----- Original Message -----
> From: "Anderson Oliveira Furtilho" 
> <andersonfurtilho em gmail.com>
> To: <lista em firebase.com.br>
> Sent: Thursday, November 08, 2007 9:29 AM
> Subject: Re: [firebase-br] RES: Em Rede sera que não da pau ?
>
>
> > Mas tipo, eu estou na minha maquina...
> > Ai rodo a procedure
> >
> > Ele da insert na master e começa a inserir na detalhe pegando o gen_id
> > atual da master.
> >
> > E se no mesmo momento outra pessoa rodou a procedure tb, o gen_id dela
> na
> > vai ser usado no meu processamento.
> >
> > Resumo:
> >
> > Minha máquina
> > Rodo a procedure e o id da master é 1;
> > ai ele vai inserir nas detalhes e eu pego o id  da master 1 e começo a
> > gravar nos detalhes.
> >
> > Na outra máquina o cara rodou a procedure ao mesmo tempo
> > Na maquina dele o id da master é 2;
> > ai ele vai inserir nas detalhes, mas como eu estou usando na procedure o
> > gen_id(meu_generator,0).
> >
> >
> > Ai vem a duvida
> >
> > quando rodo na procedure o gen_id(meu_generator,0) ele vai pegar o gen
> > atual no caso 2 ou vai pegar o 1 nas máquinas,
> > pois se ele pegar o ultimo ai ta furado.
> >
> > Pois foram duas máquinas diferentes que rodaram a procedure ao mesmo
> > tempo.
> >
> >
> > No Postgresql eu abro uma seção na procedure, então se eu rodar esta
> > procedure em 10 maquinas ao mesmo tempo os ids gerados são os da seção
> > aberta de cada procedure, não vai acontecer nunca de pegar o id de outra
> > maquina que estao rodando a procedure ao mesmo tempo.
> >
> >
> > Obrigados amigos pela dica
> >
> >
> >
> > ".:: Eder Sousa ::." <edersousa em gmail.com> 
> > escreveu na mensagem
> > news:LCEFKBKLDGFJIAOOEFJMKEBCCLAA.edersousa em gmail.com...
> > Eu acredito que não dê erro porque senão me engano o Firebird pega o ID
> > (no
> > caso se você definiu anteriormente) na hora de Gravação do Registro?
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para editar sua configuração na lista, use o endereço
> > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> >
> >
> >
> >
>
>
>
> --------------------------------------------------------------------------------
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> --------------------------------------------------------------------------------
>
>
> Internal Virus Database is out-of-date.
> Checked by AVG Free Edition.
> Version: 7.5.503 / Virus Database: 269.15.16/1102 - Release Date:
> 31/10/2007
> 16:38
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa







Mais detalhes sobre a lista de discussão lista