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

Andrei Luís compuvale.software em gmail.com
Qua Fev 2 18:05:52 -03 2011


Olá André,

Porque você falou que Gen_ID não é segura? Se a única utilidade dessa
função é para incrementar um generator e evitar duplicidade de chave
primária?

[]s
Andrei



Em 2 de fevereiro de 2011 17:59, andre conrado <acf.andre em gmail.com> escreveu:
> 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)
>
> ______________________________________________
> 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
>




Mais detalhes sobre a lista de discussão lista