Fórum Alterar coluna no firebird de varchar para integer #49790
11/03/2005
0
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
Curtir tópico
+ 0Posts
11/03/2005
Afarias
|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+
Gostei + 0
11/03/2005
Armando.boza
É 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...
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....
Gostei + 0
11/03/2005
Afarias
Eu consigo fazer a conversão tranquilamente.
Qual o erro exatamente?
T+
Gostei + 0
14/03/2005
Armando.boza
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)