[firebase-br] Alterar campo Computado

Samuel Duarte Matos samuelmatos em cprinformatica.com.br
Qua Maio 30 13:29:48 -03 2007


Olá a todos!

Estou utilizando FB 1.5.4

Meu problema é o seguinte:

Tenho um campo numa tabela, e este campo é computado.
Ex.:

O nome do meu campo é VL_TOTALPEDIDO
e ele é computado assim: VL_TOTALPRODUTOS + VL_ACRESCIMO - VL_DESCONTO

Até aí tudo bem, funciona tudo perfeitamente.
Tenho várias procedures no banco que utilizam este campo.
Aí é que surge o problema: Tenho que modificar este campo VL_TOTALPEDIDO, e 
acrescentar um campo na "computação" dele. Ficaria assim: VL_TOTALPRODUTOS + 
VL_ACRESCIMO - VL_DESCONTO + VL_OUTROSACRESCIMOS

O problema é que, como existem váaaaarias procedures utilizando o campo, não 
consigo deletar o campo para criá-lo novamente. E nem alterá-lo, até onde eu 
sei.

Com isso, tive a "brilhante" idéia de modificar as tabelas do sistema. Fiz o 
seguinte SQL:

update rdb$fields f
set f.rdb$computed_source = '(VL_TOTALPRODUTOS + VL_ACRESCIMO - VL_DESCONTO 
+ VL_OUTROSACRESCIMOS + VL_TOTALIPI)'
where f.rdb$field_name = (select rf.rdb$field_source
                          from rdb$relation_fields rf
                          where rf.rdb$field_name = 'VL_TOTALPEDIDO' and
                                rf.rdb$relation_name = 'PEDIDO');

Funcionou, de certa forma. Utilizando o IBExpert, quando eu vou na tabela 
pedido, aparece o campo VL_TOTALPEDIDO com os campos computados, tudo 
certinho, mas a SOMA real não bate, ou seja o campo que eu adicionei não 
está sendo computado. Acredito que seja pq eu precisaria tb modificar o 
campo rdb$computed_blr, que é de onde o FB pega os campos realmente.

Perguntas
1.Tem como fazer isso?
2. Não tem como eu alterar um campo computado através da cláusula ALTER 
TABLE ALTER COLUMN?

Obrigado a todos
Samuel 







Mais detalhes sobre a lista de discussão lista