[firebase-br] campo zerado - Parte II

Sandro Souza escovadordebits em gmail.com
Sex Dez 5 15:31:15 -03 2008


Bom dia/tarde João.

Ontem, eu te passei o seguinte comando:

ALTER TABLE MOVIMENTACAO
  ALTER PROVENTOS TYPE DECIMAL(18,4),
  ALTER DESCONTOS TYPE DECIMAL(18,4);

Mas testando aqui, realmente ocorreu o erro que você relatou.

Então, a melhor solução é a do nosso amigo Gustavo Moda, que deixou bem
detalhado o roteiro, que para esse seu caso da tabela CALC_HE, seria algo
como:

1 - Incluindo os novos campos substitutos, já com os novos formatos:

ALTER TABLE CALC_HE
  ADD NOVO_SAL_REAL NUMERIC(15,2),
  ADD NOVO_TOT_HR_R NUMERIC(15,2),
  ADD NOVO_TOT_HE_SR NUMERIC(15,2);

2 - Copiando e convertendo os valores do formato antigo para o novo:

UPDATE CALC_HE SET
  NOVO_SAL_REAL = SAL_REAL,
  NOVO_TOT_HR_R = TOT_HR_R,
  NOVO_TOT_HE_SR = TOT_HE_SR;

3 - Excluindo os campos antigos:

ALTER TABLE CALC_HE
  DROP SAL_REAL,
  DROP TOT_HR_R,
  DROP TOT_HE_SR;

4 - Renomeando os novos campos para os nomes originais:

ALTER TABLE CALC_HE
  ALTER NOVO_SAL_REAL TO SAL_REAL,
  ALTER NOVO_TOT_HR_R TO TOT_HR_R,
  ALTER NOVO_TOT_HE_SR TO TOT_HE_SR;

Pode testar esse aí, que funcionou aqui.

Posso até estar enganado, mas acredito que, antes disso, seria melhor
alterar o tipo desses campos de volta para FLOAT pelo IB Expert, já que ele
não converteu realmente os valores, e apenas alterou a definição desses
campos, o que deixa uma "bomba de efeito retardado" que estourará mais
adiante.

Espero ter ajudado mais que atrapalhado. :D

2008/12/5 joao_jma <joao_jma em itelefonica.com.br>

> Se o pessoal se lembra de ontem, resolveram meu problema, eu usava campo
> Float ao invés de Numeric(15,2).
>
> Não me recordo quem, mas me passaram um código para alteração dos tipos dos
> campos, o que seria muito prático pra mim.
> Segue abaixo o código:
>
> ALTER TABLE CALC_HE
>  ALTER SAL_REAL TYPE NUMERIC(15,2),
>  ALTER TOT_HR_R TYPE NUMERIC(15,2),
>  ALTER TOT_HE_SR TYPE NUMERIC(15,2);
>
> Quando executo esse comando, me retorna o seguinte erro:
>
> can't format message 13:393 -- message system code -4.
> unsuccessful metadata update.
> Cannot change datatype for SAL_REAL.  Conversion from base type FLOAT to
> BIGINT is not supported.
>
> Alguém pode me ajudar? Senão terei que alterar campo a campo na base de
> dados... rs
>
> Abraços
>
>    João M. de Amorim - Informática:
>    Andreza Enxovais - Ibitinga/SP
>    ((16) 3341-9000
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista