Cuando las cosas funcionan en bloques anónimos pero no en procedimientos almacenados, generalmente se debe a los derechos del definidor frente a los derechos del invocador. Los bloques anónimos y los procedimientos de derechos del invocador pueden usar privilegios otorgados a través de roles, pero los procedimientos de derechos del definidor no pueden.
Intenta cambiar return varchar2 is
para return varchar2 authid current_user is
.