GARANTIR DESCONTO

Fórum Alterar coluna no firebird de varchar para integer #49790

11/03/2005

0

Pessoal....

Tenho um banco no firebird e em um campo de uma tabela eu simplesmente usei o vachar ao inves de integer..... não me atentei para os problemas posteriores (que por sinal chegaram).....

Bom... eu queria mudar o tipo da coluna para integer, sendo que ela é do tipo varchar(12) ....

Eu usei o comando

ALTER TABLE FICHAS ALTER COLUMN REGFICHA TYPE INTEGER


Mas retorna um erro dizendo que a conversão não pode ser feita.

A principio eu tentei até referenciar esse campo varchar com um integer de outra tabela mas tb não funcionou...usei assim

SELECT * FROM FICHAS,INTERNACAO WHERE INTERNACAO.REGFICHA = CAST(FICHAS.REGFICHA AS INTEGER);


Pois o campo REGFICHA na tabela FICHAS é varchar(12) .....

Será que dá ára alterar o tipo da coluna ou até mesmo referenciar dois tipos diferentes de colunas entre tabelas???

Att

Armando


Armando.boza

Armando.boza

Responder

Posts

11/03/2005

Afarias

|não me atentei para os problemas posteriores (que por sinal
|chegaram).....

que problemas?


|Eu usei o comando
|ALTER TABLE FICHAS ALTER COLUMN REGFICHA TYPE INTEGER
|Mas retorna um erro dizendo que a conversão não pode ser feita.

certo, essa conversão direta não é possível


|A principio eu tentei até referenciar esse campo varchar com um integer
|de outra tabela mas tb não funcionou...usei assim
|SELECT * FROM FICHAS,INTERNACAO WHERE INTERNACAO.REGFICHA
|= CAST(FICHAS.REGFICHA AS INTEGER);

CAST(campo_varchar as integer) só não funciona quando o campo tem algum valor NÃO numérico ou quando a representação do valor é maior q o valor máximo suportado pelo tipo

lembre q INTEGER é um inteiro de 32 bits, sendo assim suporta até números pouco maiores q 2 bilhões (signed). Se o caso for esse vc pode dar um cast para um inteiro de 64bits:

cast(campo as numeric(18,0))

ou

cast(campo as bigint)


para alterar o tipo da coluna faça:

alter table tabela add campo2 integer; // ou bigint ou numeric(18,0)
update tabela set campo2 =
cast(campo1 as integer);
commit;
alter table tabela drop campo1;
alter table tabela alter campo2 to campo1;



T+


Responder

Gostei + 0

11/03/2005

Armando.boza

|não me atentei para os problemas posteriores (que por sinal |chegaram)..... que problemas?


É que a implantação do meu sistema está sendo feita por partes... e agora que tive que fazer a referência entre as duas tabelas eu não consegui...

lembre q INTEGER é um inteiro de 32 bits, sendo assim suporta até números pouco maiores q 2 bilhões (signed). Se o caso for esse vc pode dar um cast para um inteiro de 64bits: cast(campo as numeric(18,0)) ou cast(campo as bigint) para alterar o tipo da coluna faça: alter table tabela add campo2 integer; // ou bigint ou numeric(18,0) update tabela set campo2 = cast(campo1 as integer); commit; alter table tabela drop campo1; alter table tabela alter campo2 to campo1;


Amigo... neste campo eu só guardo o numero da ficha de atendimento... tentei fazer como numeric(18,0) mas deu o mesmo erro nº13048...

Tentei fazer do outro modo, criando outro campo e fazendo o update mas não funcionou .... não sei se vc se atentou mas o campo REGFICHA que quero transformar em integer é varchar(12) ou melhor é TVARHCAR12 ... é um domínio (CREATE DOMAIN ´TVARCHAR12´ AS VARCHAR(12) CHARACTER SET ISO8859_1 COLLATE PT_PT;)

e agora....


Responder

Gostei + 0

11/03/2005

Afarias

sim, atentei q é um VARCHAR(12) ... não tem problema algum. A única coisa q vc não havia citado é q era um domínio.

Eu consigo fazer a conversão tranquilamente.


Qual o erro exatamente?


T+


Responder

Gostei + 0

14/03/2005

Armando.boza

sim, atentei q é um VARCHAR(12) ... não tem problema algum. A única coisa q vc não havia citado é q era um domínio. Eu consigo fazer a conversão tranquilamente. Qual o erro exatamente? T+


Primeiramente.. desculpe a demora para responder, é que só trabalho de segunda à sexta.....

Bom, o erro que aparece é esse:

Overflow occurred during data type conversion.
conversion error from string "13048´".


Verifiquei a coluna inteira e nela consta somente numeros mesmo... numeros estes que vêem de um generator....

Não sei o que fazer.. testei com o BIGINT, o NUMERIC(18,0) e dá o mesmo erro....

Para referenciar esse varchar com um integer dá???

Tipo assim:
SELECT * FROM FICHAS,INTERNACAO WHERE FICHAS.REGFICHA = INTERNACAO.REGFICHAINT
..... ???
onde REGFICHA é varchar(12) e REGFICHAINT é integer....

Att

Armando


Responder

Gostei + 0

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

Aceitar