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.