Dúvida função to_number

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Mônica F
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 30 Abr 2008 3:12 pm
Localização: São Paulo
Mônica F.

Socorro!!!!

Tenho uma coluna que está como char, e preciso transformá-la para number, porém tenho caracteres nesse campo como faço para retirá-los.
Pois no meu select eu preciso comparar esse campo com o de outra tabela.

:(
Mônica F
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 30 Abr 2008 3:12 pm
Localização: São Paulo
Mônica F.

Vou explicar melhor....

tenho que comparar o campo num_nf (number) de uma tabela com o campo num_doc_origem (char) de outra tabela. Porém, como a coluna num_doc_origem estava como char, ela aceitou a inserção de dados que não deveria, pois por incrível que parece teve um usuário que inseriu a informaçaõ E-MAIL em vez de colocar o número da nota. Por isso que não consigo transformar o campo em number.
Apresenta o erro: ORA-01722: invalid Number

Realmente estou precisando de ajuda!!!

Valeu!

Mônica F.
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

vixiiiii... acho q você vai ter q varrer qual a nota q esta cadastrada errada... arrumar ela primeiro pra depois fazer esta alteracao

caso não queira fazer isto para não dar erro na sua funcao você pode tmb ao invez de transformar o char para number transformar o number para char...

trim(campo_char) = trim(to_char(campo_number))


vê ai se te serve...

abrçs
Mônica F
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 30 Abr 2008 3:12 pm
Localização: São Paulo
Mônica F.

Vou tentar!!! muito obrigada!!!!
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mônica,

Uma dica para buscar essas notas na base, seria testar se ela é number e, caso não seja, jogar numa tabela de log ou, concatenar o erro.

Neste exemplo abaixo, vai cair no OTHERS, pois existe uma letra no campo.

Selecionar tudo

DECLARE 
  VNUMBER NUMBER;
BEGIN 

  SELECT TO_NUMBER(NRO_SEQ)
   INTO VNUMBER
   FROM TESTE
  WHERE ID_PAC = 1
    AND ID_CONS = 2;
  
EXCEPTION  
  WHEN OTHERS THEN 
    dbms_output.put_line(' Não é Number.');
END;  

qualquer coisa, manda ai.
Mônica F
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 30 Abr 2008 3:12 pm
Localização: São Paulo
Mônica F.

Muito muito obrigada! você´s me ajudaram bastante!
Avatar do usuário
vetis
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 36
Registrado em: Sex, 25 Abr 2008 10:29 am
Localização: cariacica - es

Selecionar tudo

CREATE OR REPLACE FUNCTION Retorna_Numericos(v_string IN CHAR)
  RETURN CHAR
IS

BEGIN
  RETURN REPLACE(TRANSLATE(v_string, 
	TRANSLATE(v_string, '0123456789', '          ') ,
		LPAD(' ', LENGTH(v_string), ' ')
		), ' ', '');
END;
Obs: Criando a procedure sempre que você tiver algum problema desse é só chama-la
___________
Thiago Vetis :-o
Responder
  • Informação