Como Desativar/Ativar todas as Triggers de um Banco de Dados Firebird

 

Hoje um amigo me pediu umas dicas para recuperar um banco de dados, e no final ele precisava desativar todas as Triggers para transferir os dados para um novo banco, pesquisamos um pouco na internet e conseguimos montar os códigos:

Para desativar

SELECT 'ALTER TRIGGER ' || Trim(RDB$TRIGGER_NAME) || ' INACTIVE;'
  FROM RDB$TRIGGERS
 WHERE RDB$TRIGGER_SOURCE IS NOT NULL

Para ativar

SELECT 'ALTER TRIGGER ' || Trim(RDB$TRIGGER_NAME) || ' ACTIVE;'
  FROM RDB$TRIGGERS
 WHERE RDB$TRIGGER_SOURCE IS NOT NULL

Este código, vai gerar as instruções SQL para desativar/ativar todas as Triggers de todas as Tabelas.

Atenção
Estou usando a função Trim, disponível no Firebird 2.1 e acho que também no 2.0, sei que não tem no Firebird 1.5.x ou anteriores, mas não tem problema, se você uma versão que não suporta o Trim, basta remover que o código vai funcionar também, o Trim é apenas para melhorar a estética do resultado.

 
 
 

6 Comments

 
  1. Renato disse:

    E ai, muito boa a dica… só que você não trocou ali “Para Desativar” estão nos dois exemplos…

    abraços

  2. Cesar disse:

    @Renato, obrigado pelo aviso, já corrigi.

  3. Juciany disse:

    Oi, gostaria de saber como desativar apenas uma trigger, de uma determinada tabela. Obrigada.

  4. Cesar disse:

    @Juciany:

    O comando para desativar apenas uma trigger no Firebird ou Interbase é:

    ‘ALTER TRIGGER NOME_DA_TRIGGER INACTIVE’.

    e para ativar novamente:
    ‘ALTER TRIGGER NOME_DA_TRIGGER ACTIVE’.

  5. Juciany disse:

    Obrigada pela resposta Cesar, mas desta maneira eu já tentei e qdo executo a query (SQLDesativaTrigger.ExecSQL) ele trava, será q estou fazendo algo errado? Uso fire e Delphi 7.

  6. Sergio Kawahara disse:

    Uma outra forma:
    –desabilitar todas as triggers
    update RDB$TRIGGERS set RDB$TRIGGER_INACTIVE = 1
    where rdb$trigger_source is not null and ((rdb$system_flag = 0) or
    (rdb$system_flag is null))

    –habilita todas as triggers
    update RDB$TRIGGERS set RDB$TRIGGER_INACTIVE = 0
    where rdb$trigger_source is not null and ((rdb$system_flag = 0) or
    (rdb$system_flag is null))

 

Leave a Comment

 

You must be logged in to post a comment.