with tmp as
(
select 'Oracle11g Sap R/3' str from dual
union all
select 'ab12*)(--/DW/12KKs' str from dual
union all
select '12*&())--' from dual
)
select str,
nvl(length(replace(translate(str, replace(translate(lower(str), 'abcdefghijklmnopqrstuvwsyz', ' '), ' ', ''), ' '), ' ', '')), 0) words_num
from tmp;