[firebase-br] ver se transação já foi executada anteriormente

Cássio cassio.hc em gmail.com
Seg Jan 26 14:34:14 -03 2009


ta ae.

EXECUTE BLOCK
AS
begin
  IF (EXISTS(SELECT RDB$CONSTRAINT_NAME
    FROM RDB$RELATION_CONSTRAINTS
    WHERE  (RDB$RELATION_NAME = 'NOTA_PROMISSORIA')
    AND (RDB$CONSTRAINT_NAME = 'FK_ID_REAJUSTE'))) THEN
        begin
            update estados set nome_uf='Ac1' where stado ='AC' -- só 
para teste, não é este comando e não estou executando com este comentário.
        end
end

Daniel Sonda escreveu:
> SQL Error:  Dynamic SQL Error SQL error code = -104 Token unknown - line 
> 10, column 8 end. Error Code: -104. Invalid token The SQL: EXECUTE BLOCK
> 
> O erro diz linha 10 coluna 8...
> Tem mais algum comando antes do EXECUTE BLOCK?
> Você poderia postar o comando inteiro?
> 
> Att.
> Daniel Sonda
> www.h2jsolucoes.com.br
> 
> 
> 
> Cássio escreveu:
>> estou usando a versão 2.1
>>
>>
>>
>> Daniel Sonda escreveu:
>>> Qual versão do FB vc está usando?
>>>
>>> Att.
>>> Daniel Sonda
>>> www.h2jsolucoes.com.br
>>>
>>>
>>>
>>> Cássio escreveu:
>>>> este:
>>>>
>>>> SQL Error:  Dynamic SQL Error SQL error code = -104 Token unknown - 
>>>> line 10, column 8 end. Error Code: -104. Invalid token The SQL: 
>>>> EXECUTE BLOCK
>>>>
>>>>
>>>>
>>>> Daniel Sonda escreveu:
>>>>> qual o erro apresentado?
>>>>>
>>>>> Att.
>>>>> Daniel Sonda
>>>>> www.h2jsolucoes.com.br
>>>>>
>>>>>
>>>>>
>>>>> Cássio escreveu:
>>>>>> continua sem funcionar. Não sei o que pode ser. vlw.
>>>>>>
>>>>>>
>>>>>> nDaniel Sonda escreveu:
>>>>>>
>>>>>>> Você não pode executá-lo diretamente.
>>>>>>> Deve estar dentro de uma stored procedure ou usar o EXECUTE BLOCK:
>>>>>>>
>>>>>>> EXECUTE BLOCK
>>>>>>> as
>>>>>>> begin
>>>>>>>  IF (EXISTS(SELECT RDB$CONSTRAINT_NAME
>>>>>>>    FROM RDB$RELATION_CONSTRAINTS
>>>>>>>    WHERE  (RDB$RELATION_NAME = 'Minha_Tab')
>>>>>>>    AND (RDB$CONSTRAINT_NAME = 'FK_ID_') ) )  THEN
>>>>>>>  begin
>>>>>>>     /* seu código de atualização */
>>>>>>>  end
>>>>>>> end
>>>>>>>
>>>>>>> Att.
>>>>>>> Daniel Sonda
>>>>>>> www.h2jsolucoes.com.br
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Cássio escreveu:
>>>>>>>> opa. vlw pelo retorno.
>>>>>>>> Mas este código não está funcionando. Acho que é com a sintaxe. 
>>>>>>>> porque se executar só o select retorna os registros..
>>>>>>>>
>>>>>>>> SQL Error:  Dynamic SQL Error SQL error code = -104 Token 
>>>>>>>> unknown - line 1, column 1 IF. Error Code: -104. Invalid token 
>>>>>>>> The SQL: IF
>>>>>>>>
>>>>>>>> vlw
>>>>>>>>
>>>>>>>> Daniel Sonda escreveu:
>>>>>>>>
>>>>>>>>> IF (EXISTS(
>>>>>>>>> SELECT RDB$CONSTRAINT_NAME
>>>>>>>>> FROM RDB$RELATION_CONSTRAINTS
>>>>>>>>> WHERE  (RDB$RELATION_NAME = 'Minha_Tab')
>>>>>>>>> AND (RDB$CONSTRAINT_NAME = 'FK_ID_') ) )  THEN
>>>>>>>>>
>>>>>>>>> Att.
>>>>>>>>> Daniel Sonda
>>>>>>>>> www.h2jsolucoes.com.br
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Cássio escreveu:
>>>>>>>>>> vlw pelo retorno.
>>>>>>>>>> como eu faço pra já no sql testar se for = 1 faz.. qual a 
>>>>>>>>>> sintaxe?
>>>>>>>>>>
>>>>>>>>>> tipo assim, exemplo:
>>>>>>>>>>
>>>>>>>>>> IF (
>>>>>>>>>> SELECT COUNT(*) as num
>>>>>>>>>> FROM RDB$RELATION_CONSTRAINTS
>>>>>>>>>> WHERE  (RDB$RELATION_NAME = 'Minha_Tab')
>>>>>>>>>> AND (RDB$CONSTRAINT_NAME = 'FK_ID_') = 0 ) THEN
>>>>>>>>>>
>>>>>>>>>>      faz um insert;
>>>>>>>>>>
>>>>>>>>>> como fica para o fb?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Escovador de Bits escreveu:
>>>>>>>>>>> Bom dia/tarde Cássio.
>>>>>>>>>>>
>>>>>>>>>>> Amigo, você deve consultar as tabelas de sistema do Firebird, 
>>>>>>>>>>> ou seja, as tabelas que iniciam com "RDB$", como a 
>>>>>>>>>>> RDB$RELATIONS, etc...
>>>>>>>>>>>
>>>>>>>>>>> Pode pesquisar na internet que existe muito material sobre o 
>>>>>>>>>>> assunto, mas vamos aos 3 casos que você informou aqui e mais 
>>>>>>>>>>> alguns.
>>>>>>>>>>>
>>>>>>>>>>> 1 - Para saber se uma determinada tabela já está criada, 
>>>>>>>>>>> execute o seguinte SELECT:
>>>>>>>>>>>
>>>>>>>>>>> SELECT COUNT(*) FROM RDB$RELATIONS WHERE RDB$RELATION_NAME = 
>>>>>>>>>>> 'Nome-da-tabela'
>>>>>>>>>>>
>>>>>>>>>>> Se retornar 0, ainda não foi criada, caso contrário (1), ela 
>>>>>>>>>>> já está criada.
>>>>>>>>>>>
>>>>>>>>>>> 2 - Para saber se um determinado campo já foi criado em uma 
>>>>>>>>>>> tabela, execute o seguinte SELECT:
>>>>>>>>>>>
>>>>>>>>>>> SELECT COUNT(*) FROM RDB$RELATION_FIELDS 
>>>>>>>>>>> WHERE(RDB$RELATION_NAME = 'Nome-da-tabela')AND(RDB$FIELD_NAME 
>>>>>>>>>>> = 'Nome-do-campo')
>>>>>>>>>>>
>>>>>>>>>>> O resultado deve ser interpretado como no item anterior (0 = 
>>>>>>>>>>> Ainda não foi criado, 1 = Já foi criado).
>>>>>>>>>>>
>>>>>>>>>>> 3 - Para saber se uma determinada regra (constraint) já foi 
>>>>>>>>>>> criada, execute o seguinte SELECT:
>>>>>>>>>>>
>>>>>>>>>>> SELECT COUNT(*) FROM RBD$RELATION_CONSTRAINTS 
>>>>>>>>>>> WHERE(RDB$RELATION_NAME = 
>>>>>>>>>>> 'Nome-da-tabela')AND(RDB$CONSTRAINT_NAME = 'Nome-da-regra')
>>>>>>>>>>>
>>>>>>>>>>> O resultado deve ser interpretado como no item anterior (0 = 
>>>>>>>>>>> Ainda não foi criado, 1 = Já foi criado).
>>>>>>>>>>>
>>>>>>>>>>> 4 - No seu caso de verificar se um campo foi renomeado, 
>>>>>>>>>>> bastará verificar se existe um campo, na mesma tabela, com o 
>>>>>>>>>>> novo nome, o que significará que o campo já teria sido 
>>>>>>>>>>> renomeado, usando a consulta do item 2.
>>>>>>>>>>>
>>>>>>>>>>> Cada banco de dados contém tabelas de sistemas justamente 
>>>>>>>>>>> para que possamos, via programação, acessar e verificar todos 
>>>>>>>>>>> os objetos de banco (tabelas, campos, stored procedures, 
>>>>>>>>>>> triggers, etc...), e no caso do Firebird não seria diferente.
>>>>>>>>>>>
>>>>>>>>>>> O que coloquei aqui foi só a ponta do iceberg, e tem muito 
>>>>>>>>>>> material sobre essas tabelas de sistema do Firebird na internet.
>>>>>>>>>>>
>>>>>>>>>>> Espero ter te ajudado mais que atrapalhado.
>>>>>>>>>>>
>>>>>>>>>>> Cássio escreveu:
>>>>>>>>>>>> --adiciona um campo
>>>>>>>>>>>> ALTER TABLE Minha_tab
>>>>>>>>>>>>   ADD Novo_Campo VARCHAR(100);
>>>>>>>>>>>>
>>>>>>>>>>>> --delete um relacionamento
>>>>>>>>>>>> ALTER TABLE Minha_tab
>>>>>>>>>>>>   DROP CONSTRAINT FK_ID_REL;
>>>>>>>>>>>>
>>>>>>>>>>>> --ALTERA NOME DA COLUNA
>>>>>>>>>>>> ALTER TABLE minha_Tab
>>>>>>>>>>>>   ALTER COLUMN Nome1 TO Nome_123;
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> gostaria que antes de exeuctar isso verificasse se isso já 
>>>>>>>>>>>> foi executado anteriormente... como faço isso no fb?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> vlw.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ______________________________________________
>>>>>>>>>>>> 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
>>>>>>>>>>
>>>>>>>>>> __________ Información de ESET Smart Security, versión de la 
>>>>>>>>>> base de firmas de virus 3792 (20090123) __________
>>>>>>>>>>
>>>>>>>>>> ESET Smart Security ha comprobado este mensaje.
>>>>>>>>>>
>>>>>>>>>> http://www.eset.com
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ______________________________________________
>>>>>>>>> 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
>>>>>>>>
>>>>>>>> __________ Información de ESET Smart Security, versión de la 
>>>>>>>> base de firmas de virus 3795 (20090123) __________
>>>>>>>>
>>>>>>>> ESET Smart Security ha comprobado este mensaje.
>>>>>>>>
>>>>>>>> http://www.eset.com
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> ______________________________________________
>>>>>>> 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
>>>>>>
>>>>>> __________ Información de ESET Smart Security, versión de la base 
>>>>>> de firmas de virus 3795 (20090123) __________
>>>>>>
>>>>>> ESET Smart Security ha comprobado este mensaje.
>>>>>>
>>>>>> http://www.eset.com
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> ______________________________________________
>>>>> 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
>>>>
>>>> __________ Información de ESET Smart Security, versión de la base de 
>>>> firmas de virus 3795 (20090123) __________
>>>>
>>>> ESET Smart Security ha comprobado este mensaje.
>>>>
>>>> http://www.eset.com
>>>>
>>>>
>>>>
>>>>
>>>
>>> ______________________________________________
>>> 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
>>
>> __________ Información de ESET Smart Security, versión de la base de 
>> firmas de virus 3795 (20090123) __________
>>
>> ESET Smart Security ha comprobado este mensaje.
>>
>> http://www.eset.com
>>
>>
>>
>>
> 
> ______________________________________________
> 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