Geben Sie einen SQL-Datentyp zurück, z. VARCHAR2. Außerdem würde ich davon abraten, WHEN OTHERS zu verwenden. Außerdem brauchen Sie keine Abfrage auf dual:
create or replace
function IS_NUMBER(str in varchar2) return varchar2
IS
n number;
BEGIN
n := to_number(str);
return 'Y';
EXCEPTION WHEN VALUE_ERROR THEN
return 'N';
END;