[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