Por empezar, me parece que lo estás complicando de más...
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION UF_ANHO_BISIESTO (anho IN varchar2 ) RETURN varchar2
IS
BEGIN
DECLARE
anho1 NUMBER(4);
retorna varchar2(1);
BEGIN
anho1 := TO_NUMBER(anho);
IF (MOD(anho1,4) = 0 AND MOD(anho1,100) <> 0) OR (MOD(anho1,400) = 0)) THEN
retorna := '1'; --Si es bisiesto retorna 1
ELSE
retorna := '0'; --Si no es bisiesto retorna 0
END IF;
RETURN retorna;
END;
END;