Una idea adicional, mencionada aquí, es usar una expresión regular para verificar:
SELECT foo
FROM bar
WHERE REGEXP_LIKE (foo,'^[[:digit:]]+$');
Lo bueno es que no necesita una función PL/SQL separada. La parte potencialmente problemática es que una expresión regular puede no ser el método más eficiente para una gran cantidad de filas.