Fórum Implementar valor Default para campos ja existentes #301446
01/11/2005
0
utilizo FB 1.5 e D7
tenho varias tabelas com campos criados da seguinte maneira:
ALTER TABLE ´ATENDIMENTO´ ADD ´CD_CLIENTE´ INTEGER;
só que agora eu gostaria de fazer um Update no banco para que o campo tenha um valor default, e realizar um update para todos esses campos que possuem valores nulos para receber o valor default do campo
como faço ?
/* o comando abaixo não funcionou para indicar um valor default para o campo já existente */
ALTER TABLE ´ATENDIMENTO´ ADD ´CD_CLIENTE´ INTEGER DEFAULT 0;
Diogo
Diogoalles
Curtir tópico
+ 0Posts
03/11/2005
Diogoalles
ainda ñ consegui resolver...
será que tem algum comando ?
obrigado
Diogo
Gostei + 0
03/11/2005
Fabio Nascimento
Gostei + 0
03/11/2005
Wiltonfenix
Se você quer adicionar, tente assim:
[color=black:e067d9f2b4]ALTER TABLE ´ATENDIMENTO´ ADD ´CD_CLIENTE´ INTEGER DEFAULT ´0´;[/color:e067d9f2b4]
ou
[color=black:e067d9f2b4]ALTER TABLE ´ATENDIMENTO´ ADD ´CD_CLIENTE´ INTEGER DEFAULT ´0´;[/color:e067d9f2b4]
Agora, se você quer alterar uma coluna, tente assim:
[color=red:e067d9f2b4]ALTER TABLE ´ATENDIMENTO´ MODIFY ´CD_CLIENTE´ INTEGER DEFAULT ´0´;[/color:e067d9f2b4]
ou
[color=red:e067d9f2b4]ALTER TABLE ´ATENDIMENTO´ MODIFY ´CD_CLIENTE´ INTEGER DEFAULT ´0´;[/color:e067d9f2b4]
Não sei se isto vai colocar o valor default nos registros já existentes. Acho que para isto você vai precisar usar o UPDATE.
Gostei + 0
08/11/2005
Diogoalles
Ainda não consegui resolver essa questão com o que foi respondido e não encontrei nada aqui no fórum.
Eu não quero alterar o tipo do campo, somente indicar o Defaul.
Existe algum tipo de Alter Field ?
obrigado
Diogo
Gostei + 0
08/11/2005
Wiltonfenix
Para indicar o default, são os camandos que passei. Mas isso só vai funcionar para os registros novos. Se quiser que os campos nulos de registros antigos também passem a ter os valores default que você definiu, você terá que usar o comando UPDATE:
UPDATE sua_tabela SET seu_campo1=valor_default1,seu_campo2=valor_default2,... WHERE 1>0
Gostei + 0
08/11/2005
Diogoalles
ALTER TABLE ´ATENDIMENTO´ MODIFY ´CD_CLIENTE´ INTEGER DEFAULT ´0´;
ou
ALTER TABLE ´ATENDIMENTO´ MODIFY ´CD_CLIENTE´ INTEGER DEFAULT ´0´;
os comandos acima o compilador não identifica o MODIFY, o Fierebird 1.5 tem suporte a isso ?
para os campos antigos setar o valor default esta ok, ja criei um script conform e vc falou e funcionou...
só que no banco dos clientes não consegui setar a propriedade Default dos campos já que não consegui um comando que funcione.
utilizo o IBExpert para execução dos scripts e manutenção do banco.
se puderem me ajudar, isso é mt importante
obrigado
Diogo
Gostei + 0
08/11/2005
Wiltonfenix
Como disse o FabioNascimento, acredito então que no Firebird você não vai conseguir fazer isto. Tomei como base o MySQL que tem esse recurso e funciona muito bem. Já que quando eu usei o Firebird não cheguei a utilizar esse recurso.
Gostei + 0
08/11/2005
Diogoalles
criei um campo com valor Default - permitiu criar sem problemas
coloquei no sistema um instrução de insert, sem colocar esse novo campo na instrução
após executar verifiqei no banco e o valor do campo com default para aquele registro foi preenchido corretamente,
após o insert realizei um select para verficiar o valor e o mesmo estava preenchido com o seu default.
então acredito que o ´default´ tenha suporte para o FB 1.5, só acho que o comando modify ñ é suportado, por isso gostaria de encontrar um comando.
obrigado
Diogo
Gostei + 0
08/11/2005
Emerson Nascimento
1 - cria um campo temporário para definir o valor default,
2 - copia essa definição para o campo real e
3 - elimina o campo temporário.
tomando seu caso como exemplo:
ALTER TABLE ATENDIMENTO ADD CMP$$TEMP INTEGER DEFAULT 0; 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 = ´ATENDIMENTO´) AND (F2.RDB$FIELD_NAME = ´CMP$$TEMP´)), F1.RDB$DEFAULT_SOURCE = (SELECT F3.RDB$DEFAULT_SOURCE FROM RDB$RELATION_FIELDS F3 WHERE (F3.RDB$RELATION_NAME = ´ATENDIMENTO´) AND (F3.RDB$FIELD_NAME = ´CMP$$TEMP´)) WHERE (F1.RDB$RELATION_NAME = ´ATENDIMENTO´) AND (F1.RDB$FIELD_NAME = ´CD_CLIENTE´); ALTER TABLE ATENDIMENTO DROP CMP$$TEMP;
Gostei + 0
08/11/2005
Wiltonfenix
Dá uma olhada então na documentação do FB e veja a sintaxe do comando ALTER TABLE para alterar um campo. Acho que para alterar um campo no FB não é MODIFY mesmo não, e sim ALTER COLUMN.
Gostei + 0
08/11/2005
Diogoalles
Emerson, valeu, funcionou perfeito, era o que eu precisava.
Winton, valeu tb.
abraço
Diogo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)