Wspomnianym tutaj dodatkowym pomysłem jest użycie wyrażenia regularnego do sprawdzenia:
SELECT foo
FROM bar
WHERE REGEXP_LIKE (foo,'^[[:digit:]]+$');
Fajne jest to, że nie potrzebujesz oddzielnej funkcji PL/SQL. Potencjalnie problematyczna część polega na tym, że wyrażenie regularne może nie być najskuteczniejszą metodą dla dużej liczby wierszy.