Olá
Existem duas formas de verificar se uma string contém um número válido. A primeira forma é usando as funções translate, trim e length. Quando usadas em conjunto você obtém null se a string for número ou o comprimento da string sem espaços em branco. Veja abaixo:
select length(trim(translate('minha_variavel', ' +-0123456789.', ' '))) n1, length(trim(translate('123456789.9999', ' +-0123456789.',' '))) n2 from dual;
O resultado dessa query é:
N1 N2
14 null
Outra forma é usando a função to_number(). Caso a string passada contiver caracteres não numéricos é lançada uma exceção.
Observação: Um número na notação exponencial também será válido. Exemplo: 1E1
declare n number; s varchar2(10); begin s := '1236'; n := to_number(s); dbms_output.put_line('É número'); exception when others then dbms_output.put_line('Não é número'); end;
Valeu Roberto. Me ajudou aqui.
Abs e tenha um bom fim de semana.
A função com to_number() não está certo, teste com
s := ‘1E1’;
É verdade, o ‘E’ significa exponencial.