Uma ideia adicional, mencionada aqui, é usar uma expressão regular para verificar:
SELECT foo
FROM bar
WHERE REGEXP_LIKE (foo,'^[[:digit:]]+$');
A parte boa é que você não precisa de uma função PL/SQL separada. A parte potencialmente problemática é que uma expressão regular pode não ser o método mais eficiente para um grande número de linhas.