Allow me to correct you - they have NOT entered numeric data. They have input a string, the string might consist only of numbers - but they have entered a STRING, not a number. A string.
So, you want to count the number of rows whereby the string could safely be converted to a number vs the rows where that is not true.... (can you guess a pet peeve of mine? the storing of numbers or dates in strings and pretending they are numbers or dates.... they are not, they are just strings)
ops$tkyte%ORA10GR2> create or replace function is_number( p_string in varchar2 ) return varchar2
2 is
3 not_a_number exception;
4 pragma exception_init( not_a_number, -6502 );
5 begin
6 if ( cast(p_string as number) is not null )
7 then
8 return 'Y';
9 end if;
10 exception
11 when not_a_number
12 then
13 return 'N';
14 end is_number;
15 /
Function created.
ops$tkyte%ORA10GR2> column is_number format a10
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> create table t as select decode( mod(rownum,2), 0, object_name, dbms_random.random ) string from all_objects;
Table created.
ops$tkyte%ORA10GR2> select is_number( string ) is_number, count(*) from t group by is_number( string );
IS_NUMBER COUNT(*)
---------- ----------
Y 25129
N 25129