converter varchar para numerico

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
pldylan
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 28 Mai 2007 4:39 pm
Localização: Curitiba - pr

Srs. tenho um campo varchar na minha tabela e gostaria de converte-lo para number, como faço isso?
valeu
ARF
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Qui, 03 Ago 2006 9:30 am
Localização: Criciúma - SC

1 - se a coluna estiver vazia é só alterar, sem problemas.

2 - se a coluna tiver dados:
2.1 - criar uma nova coluna com o tipo desejado (temporária);
2.2 - certificar-se que não existam valores diferentes de números;
2.3 - fazer um update (nova coluna numérica (temporária) = coluna caracter que deseja alterar) + commit;
2.4 - verificar a existência de restrições (no null, pk, fk, etc) e desabilitá-las temporariamente, se possível;
2.5 - excluir os dados da coluna caracter (que foi replicada para a nova coluna numérica) + update;
2.6 - alterar o tipo de dado da coluna caracter para numérico;
2.7 - fazer um update (nova coluna numérica (ex-caracter) = coluna numérica (temporária)) + commit;
2.8 - se for o caso, habilitar as restrições;
2.9 - dropar a coluna numérica temporária;

ARF.
pldylan
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 28 Mai 2007 4:39 pm
Localização: Curitiba - pr

Fiz conforme você falou mas quando vou realizar o update ele da erro não aceita o valor da coluna VARCHAR para NUMBER, na coluna VARCHAR so tenho numeros.

o que eu devo fazer?
cvaleu
ARF
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Qui, 03 Ago 2006 9:30 am
Localização: Criciúma - SC

Existe algum valor decimal (com . ou ,) na coluna caracter?
Imagino que tenha, e que o formato esteja diferente do padrão usado pelo seu banco.

Por exemplo, você tem valores do tipo 3.2, mas o seu banco está configurado para usar o delimitador . para casas decimais.
Com isso, somente seria possível inserir valores no formato 3,2.
pldylan
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 28 Mai 2007 4:39 pm
Localização: Curitiba - pr

Estou fazendo desta forma,

Selecionar tudo

UPDATE PROPOSTA SET TEMP = REPLACE(VALOR,'.',',')
mas ele esta dando o seguinte erro

Selecionar tudo

ORA-01722: invalid number
pldylan
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 28 Mai 2007 4:39 pm
Localização: Curitiba - pr

Cara deu certo,... valeu pela ajuda..
ARF
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Qui, 03 Ago 2006 9:30 am
Localização: Criciúma - SC

Que bom que deu certo!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Google Adsense [Bot] e 9 visitantes