[firebase-br] RES: RES: Ajuda com SQL (Insert Into)

andre conrado acf.andre em gmail.com
Qua Fev 2 17:59:46 -03 2011


Concordo contigo Antonio também, mas como sitei, o uso da função
GEN_ID para obter o último ID da tabela não é segura tb. O mais
correto mesmo seria utilizar uma SP que:

1 - gera o ID e guardar em uma variável local;
2 - Insira o registro na tabela TB_C100 utilizando para o ID o número
guardado na variável local;
3 - e por último insira o registro na tabela TB_C170, utilizando a
mesma variável local;

mas não sabemos se o cenário de nosso amigo permiti essa simultaneidade;

Em 02/02/11, Antonio Carlos<a.lima.silva em terra.com.br> escreveu:
> Vou dar uma do contra aqui, quando vc faz select max em um contesto normal
> de transação, se esse select for feito por duas estações "simultaneamente"
> para as duas retornarão o mesmo valor e vai haver violação da chave.
>
> Att.
> Antonio Carlos
>
>
>
> Confidencialidade: A informação contida nesta mensagem de e-mail, incluindo
> quaisquer anexos, é confidencial e está reservada apenas à pessoa ou
> entidade para a qual foi endereçada. Se você não é o destinatário ou a
> pessoa responsável por encaminhar esta mensagem ao destinatário, você está,
> por meio desta, notificado que não deverá rever, retransmitir, imprimir,
> copiar, usar ou distribuir esta mensagem de e-mail ou quaisquer anexos. Caso
> você tenha recebido esta mensagem por engano, por favor, contate o remetente
> imediatamente e apague esta mensagem de seu computador ou de qualquer outro
> banco de dados. Muito obrigado.
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
> nome de Diego Maccari
> Enviada em: quarta-feira, 2 de fevereiro de 2011 14:50
> Para: FireBase
> Assunto: Re: [firebase-br] RES: Ajuda com SQL (Insert Into)
>
> Prezado André
>
> Primeiramente obrigado por sua disposição
>
> Substitui a função GEN_ID pela função MAX() sendo assim
> onde eu teria:
>
> INSERT INTO TB_C170 (ID, CNPJ_IMP, MES_IMP, ANO_IMP, REG, NUM_ITEM,
> COD_ITEM, DESCR_COMPL, QTD, UNID, VL_ITEM, VL_DESC, IND_MOV, CST_ICMS, CFOP,
>
> COD_NAT, VL_BC_ICMS, ALIQ_ICMS, VL_ICMS, VL_BC_ICMS_ST, ALIQ_ST, VL_ICMS_ST,
>
> IND_APUR, CST_IPI, COD_ENQ, VL_BC_IPI, ALIQ_IPI, VL_IPI, CST_PIS, VL_BC_PIS,
>
> ALIQ_PIS, QUANT_BC_PIS, ALIQ_PIS_REAIS, VL_PIS, CST_COFINS, VL_BC_COFINS,
> ALIQ_COFINS, QUANT_BC_COFINS, ALIQ_COFINS_REAIS, VL_COFINS, COD_CTA,
> ID_C100) VALUES ((SELECT GEN_ID(GEN_TB_C170_ID, 1) FROM RDB$DATABASE),
> '00.000.000/0000-00', 'Janeiro', '2010', 'C170', 1, '42196', NULL, '16',
> 'UN', '606.4', '0', '0', '060', '1403', '1403', '0', '0', '0', '0', '0',
> '0', '0', NULL, NULL, '0', '0', '0', '04', '0', '1.65', NULL, NULL, '0',
> '04', '0', '7.6', NULL, NULL, '0', '604', (SELECT GEN_ID(GEN_TB_C100_ID, 0)
> FROM RDB$DATABASE));
>
> Passaria a ser:
>
> INSERT INTO TB_C170 (ID, CNPJ_IMP, MES_IMP, ANO_IMP, REG, NUM_ITEM,
> COD_ITEM, DESCR_COMPL, QTD, UNID, VL_ITEM, VL_DESC, IND_MOV, CST_ICMS, CFOP,
>
> COD_NAT, VL_BC_ICMS, ALIQ_ICMS, VL_ICMS, VL_BC_ICMS_ST, ALIQ_ST, VL_ICMS_ST,
>
> IND_APUR, CST_IPI, COD_ENQ, VL_BC_IPI, ALIQ_IPI, VL_IPI, CST_PIS, VL_BC_PIS,
>
> ALIQ_PIS, QUANT_BC_PIS, ALIQ_PIS_REAIS, VL_PIS, CST_COFINS, VL_BC_COFINS,
> ALIQ_COFINS, QUANT_BC_COFINS, ALIQ_COFINS_REAIS, VL_COFINS, COD_CTA,
> ID_C100) VALUES ((SELECT GEN_ID(GEN_TB_C170_ID, 1) FROM RDB$DATABASE),
> '00.000.000/0000-00', 'Janeiro', '2010', 'C170', 1, '42196', NULL, '16',
> 'UN', '606.4', '0', '0', '060', '1403', '1403', '0', '0', '0', '0', '0',
> '0', '0', NULL, NULL, '0', '0', '0', '04', '0', '1.65', NULL, NULL, '0',
> '04', '0', '7.6', NULL, NULL, '0', '604', (SELECT MAX(ID)FROM TB_C100));
>
> Gostei do resultado ate porque com MAX() o maior ID da tabela e com GEN_ID
> poderia ter problemas caso por algum motivo o
> INSERT da TB_C700 não fosse executado corretamente,
> muito obrigado pela dica, fico te devendo uma, valeu...
>
>
> --------------------------------------------------
> From: "andre conrado" <acf.andre em gmail.com>
> Sent: Wednesday, February 02, 2011 2:07 PM
> To: "FireBase" <lista em firebase.com.br>
> Subject: Re: [firebase-br] RES: Ajuda com SQL (Insert Into)
>
>> Diego, ainda qto ao ID, vc não precisa usar o SELECT GEN_ID no INSERT,
>> pode usar o GEN_ID sozinho como se faz com uma outra função qualquer.
>>
>> Agora, eu acredito q seria mais seguro se vc buscasse na tabela
>> TB_C100 o último usando um SELECT MAX(ID) FROM TB_C100. Isso evitaria
>> q numa possível manutenção futura (onde a forma de atualização do
>> campo ID mudasse) a inserção ficasse inconsistente.
>>
>> Em 28/01/11, Carlos Alberto<cacgodinho em gmail.com> escreveu:
>>> Diego,
>>>
>>> Tive problemas com inserção de datas no FB mas consegui resolver.
>>> Faça da seguinte forma que funciona redondo...
>>>
>>> sqlstr="INSERT INTO TABELA (Codigo, Data) VALUES ('" & varCodigo & '", '"
>
>>> &
>>> format(varData,"dd.mm.yyyy") & "')
>>>
>>> Espero que ajude...
>>>
>>> Carlos Alberto.
>>>
>>> ----- Original Message -----
>>> From: "Diego Maccari" <diegomaccari em ig.com.br>
>>> To: "FireBase" <lista em firebase.com.br>
>>> Sent: Friday, January 28, 2011 9:13 AM
>>> Subject: Re: [firebase-br] RES: Ajuda com SQL (Insert Into)
>>>
>>>
>>> Julio muito obrigado pela dica mas este erro eu já consertei aqui o
>>> problema
>>> estava na falta de uma coluna não era o SELECT GEN_ID
>>> o firebird aceita varios select's dentro do insert.
>>>
>>> mas pra minha felididade agora estou com problema em um campo DATE que
>>> não
>>> aceita um determinado valor exemplo = '10/01/2011'
>>> como seria a maneira correta de inserir datas no fb  ?
>>>
>>> --------------------------------------------------
>>> From: "Julio Cezar - Desenvolvimento" <juliocezarsilva em sfox.com.br>
>>> Sent: Friday, January 28, 2011 8:17 AM
>>> To: "'FireBase'" <lista em firebase.com.br>
>>> Subject: [firebase-br] RES:  Ajuda com SQL (Insert Into)
>>>
>>>> Não sei se ajuda mas se ao inserir na tabela TB_C100_ID vc usar da
>>>> seguinte
>>>> forma.
>>>>
>>>> INSERT INT TB_C100_ID (SEUS CAMPOS) VALUES (OS VALORES) RETURNING O ID
>>>> DA
>>>> TABELA
>>>>
>>>> Você têm o id que inseriu nessa tabela disponivel em seu recordset
>>>> depois
>>>> basta fazer o insert na outra tabela, desta forma não funcionaria não?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Nada substitui o ser humano! Inst. Faber Ludens
>>>> -----Mensagem original-----
>>>> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
>>>> Em
>>>> nome de Jeter Rabelo Ferreira
>>>> Enviada em: quinta-feira, 27 de janeiro de 2011 17:52
>>>> Para: FireBase
>>>> Assunto: Re: [firebase-br] Ajuda com SQL (Insert Into)
>>>>
>>>> GEN_ID(GEN_TB_C100_ID, 1)
>>>>
>>>> 2011/1/27 Diego Maccari dos Santos <diegomaccari em ig.com.br>
>>>>
>>>>> Ajuda com SQL (Insert Into)
>>>>>
>>>>> Pessol estou tentando inserir um registro no BD (Firebird) onde o 1º
>>>>> campo
>>>>> ID é chave primaria que recebe o valor de um generator e o ultimo campo
>
>>>>> é
>>>>> um
>>>>> campo INTEIRO no qual estou inserindo o valor da chve primaria de outra
>>>>> tabela porem este campo não é chave estrangeira estou tentando pegar o
>>>>> valor
>>>>> do generator e inserir no campo não está dando certo uso o seguinte
>>>>> SQL:
>>>>>
>>>>> INSERT INTO TB_C170 (ID, CNPJ_IMP, MES_IMP, ANO_IMP, REG, NUM_ITEM,
>>>>> COD_ITEM, DESCR_COMPL, QTD, UNID, VL_ITEM, VL_DESC, IND_MOV, CST_ICMS,
>>>>> CFOP,
>>>>> COD_NAT, VL_BC_ICMS, ALIQ_ICMS, VL_ICMS, VL_BC_ICMS_ST, ALIQ_ST,
>>>>> VL_ICMS_ST,
>>>>> IND_APUR, CST_IPI, COD_ENQ, VL_BC_IPI, ALIQ_IPI, VL_IPI, CST_PIS,
>>>>> VL_BC_PIS,
>>>>> ALIQ_PIS, QUANT_BC_PIS, ALIQ_PIS_REAIS, VL_PIS, CST_COFINS,
>>>>> VL_BC_COFINS,
>>>>> ALIQ_COFINS, QUANT_BC_COFINS, ALIQ_COFINS_REAIS, VL_COFINS, COD_CTA,
>>>>> ID_C100) VALUES ((SELECT GEN_ID(GEN_TB_C170_ID, 1) FROM RDB$DATABASE),
>>>>> '00.000.000/0000-00', 'Janeiro', '2010', 'C170', , '73695', NULL, '49',
>>>>> 'UN', '269,5', '0', '0', '010', '1403', '1403', '0', '7', '0', '0',
>>>>> '0',
>>>>> '0', '0', NULL, NULL, '0', '0', '0', '01', '269,5', '1,65', NULL, NULL,
>>>>> '4,45', '01', '269,5', '7,6', NULL, NULL, '20,48', '604', (SELECT
>>>>> GEN_ID(GEN_TB_C100_ID, 0) FROM RDB$DATABASE));
>>>>>
>>>>> Onde está o erro ???
>>>>> Alguém pode ajudar?
>>>>>
>>>>> Acho que o erro está no ultimo SELECT GEN_ID que coloquei pra pegar o
>>>>> ID
>>>>> atual da outra tabela, a tabela chama TB_C100 e o Generation
>>>>> GEN_TB_C100_ID.
>>>>> ______________________________________________
>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> []'s
>>>> Jéter Rabelo Ferreira
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>>>
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>
>>
>> --
>> Um Abraço,
>> André Conrado.
>>
>> 055 21 9176-7013 - Claro
>> 055 21 9896-5449 - Vivo (apenas mensagens SMS)
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>


-- 
Um Abraço,
André Conrado.

055 21 9176-7013 - Claro
055 21 9896-5449 - Vivo (apenas mensagens SMS)




Mais detalhes sobre a lista de discussão lista