Une idée supplémentaire, mentionnée ici, consiste à utiliser une expression régulière pour vérifier :
SELECT foo
FROM bar
WHERE REGEXP_LIKE (foo,'^[[:digit:]]+$');
La partie intéressante est que vous n'avez pas besoin d'une fonction PL/SQL distincte. La partie potentiellement problématique est qu'une expression régulière peut ne pas être la méthode la plus efficace pour un grand nombre de lignes.