[firebase-br] Auxilio com campo booleano

Jeferson Oliveira jefersonfoliveira em gmail.com
Ter Fev 6 16:13:23 -03 2007


FireBird punisher escreveu:
> eu preciso apenas adicionar o default

Algumas notas importantes:
1) O Firebird não possui um método padronizado para definição de valor
padrão para campos já existentes;
2) O valor padrão é armazenado na tabela RDB$RELATION_FIELDS em um
campo BLOB, que "não pode" ser atualizado diretamente, pois não
armazena o valor literal, mas sim um código compilado que representa o
valor a ser utilizado;

3) O caminho mais simples, porém não seguro, para realizar essa
alteração é criar um campo temporário com o valor padrão desejado.
Nessa hora o Firebird irá gerar o código compilado para o valor do
novo campo. Esse código pode ser atribuído a um campo já existente.
Exemplo:

alter table NomeTabela add NomeCampoTemporario TipoCampoTemporario ValorPadrao;
update RDB$RELATION_FIELDS F1
set
F1.RDB$DEFAULT_VALUE  = (select F2.RDB$DEFAULT_VALUE
                         from RDB$RELATION_FIELDS F2
                         where (F2.RDB$RELATION_NAME = 'NomeTabela') and
                               (F2.RDB$FIELD_NAME = 'NomeCampoTemporario')),
F1.RDB$DEFAULT_SOURCE = (select F3.RDB$DEFAULT_SOURCE from
RDB$RELATION_FIELDS F3
                         where (F3.RDB$RELATION_NAME = %s) and
                               (F3.RDB$FIELD_NAME = 'NomeCampoTemporario'))
where (F1.RDB$RELATION_NAME = 'NomeTabela') and
      (F1.RDB$FIELD_NAME = 'NomeCampoExistente');
alter table %s drop NomeCampoTemporario ;

4) Sempre que alterar tabelas de sistema diretamente é recomendável
que realize um backup/restore no banco de dados.


Abraço!
Jeferson Oliveira




Mais detalhes sobre a lista de discussão lista