Fórum Implementar valor Default para campos ja existentes #301446

01/11/2005

0

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


Diogoalles

Diogoalles

Responder

Posts

03/11/2005

Diogoalles

bom dia pessoal

ainda ñ consegui resolver...
será que tem algum comando ?

obrigado
Diogo


Responder

Gostei + 0

03/11/2005

Fabio Nascimento

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.


Responder

Gostei + 0

03/11/2005

Wiltonfenix

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.


Responder

Gostei + 0

08/11/2005

Diogoalles

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


Responder

Gostei + 0

08/11/2005

Wiltonfenix

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


Responder

Gostei + 0

08/11/2005

Diogoalles

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


Responder

Gostei + 0

08/11/2005

Wiltonfenix

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.


Responder

Gostei + 0

08/11/2005

Diogoalles

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


Responder

Gostei + 0

08/11/2005

Emerson Nascimento

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:
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;



Responder

Gostei + 0

08/11/2005

Wiltonfenix

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.


Responder

Gostei + 0

08/11/2005

Diogoalles

e ai Galera :) :) :)

Emerson, valeu, funcionou perfeito, era o que eu precisava.

Winton, valeu tb.

abraço

Diogo


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar