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

Daniel Sonda daniel em mhnet.com.br
Sáb Jan 24 10:36:52 -03 2009


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
>
>
>
>




Mais detalhes sobre a lista de discussão lista