Un'altra idea, menzionata qui, è quella di utilizzare un'espressione regolare per controllare:
SELECT foo
FROM bar
WHERE REGEXP_LIKE (foo,'^[[:digit:]]+$');
La parte bella è che non hai bisogno di una funzione PL/SQL separata. La parte potenzialmente problematica è che un'espressione regolare potrebbe non essere il metodo più efficiente per un numero elevato di righe.