Implementar valor Default para campos ja existentes
pessoal
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
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
Curtidas 0
Respostas
Diogoalles
01/11/2005
bom dia pessoal
ainda ñ consegui resolver...
será que tem algum comando ?
obrigado
Diogo
ainda ñ consegui resolver...
será que tem algum comando ?
obrigado
Diogo
GOSTEI 0
Fabio Nascimento
01/11/2005
Bom dia amigo, que eu saiba o recurso de valores Default ainda não está implementado no firebird. Embora você consiga atribuir um valor default na hora da criação do campo, o Banco não utiliza esse valor, e se o campo não for not null, ele não vai receber nada.
GOSTEI 0
Wiltonfenix
01/11/2005
Não entendi muito bem se você quer adicionar colunas ou alterar!
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.
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
Diogoalles
01/11/2005
Bom dia Pessoal
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
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
Wiltonfenix
01/11/2005
Amigo,
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
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
Diogoalles
01/11/2005
Olá Wilton
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
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
Wiltonfenix
01/11/2005
Blz!
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.
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
Diogoalles
01/11/2005
bem , eu realizei o teste ..
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
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
Emerson Nascimento
01/11/2005
o IBExpert faz um ´ajuste técnico´ para resolver esse problema. ele faz o processo em 3 partes:
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:
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
Wiltonfenix
01/11/2005
Ok Diogo. Menos mau né.
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.
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
Diogoalles
01/11/2005
e ai Galera :) :) :)
Emerson, valeu, funcionou perfeito, era o que eu precisava.
Winton, valeu tb.
abraço
Diogo
Emerson, valeu, funcionou perfeito, era o que eu precisava.
Winton, valeu tb.
abraço
Diogo
GOSTEI 0