CREATE OR REPLACE FUNCTION is_numeric(number_str VARCHAR2) RETURN BOOLEAN IS x_is_numeric PLS_INTEGER := 0; BEGIN SELECT XMLELEMENT ("ROWSET", XMLAGG ( XMLELEMENT("ROW", xmlattributes(ROWNUM AS "num"), XMLELEMENT ("STRING_VAL", REPLACE(number_str, ',', '.')) )) ).transform(XMLTYPE.createXML( '' || '' || '' || '' || '' || ' ' || ' ' || ' ' || '' || '' || '' || '')).getStringVal() AS RES INTO x_is_numeric FROM dual; RETURN x_is_numeric > 0; END is_numeric;