Hola hola amiga:
Para lo que necesitas hay un truco que te puede resultar: crear primero una vista, y luego utilizarla en el procedimiento almacenado.
¿Qué significa esto? Significa que primero crearás una vista que devuelva exactamente los mismos valores que devolvería tu Función (sin parámetros, por supuesto), y luego crearías la función asignándole como tipo de dato de salida el nombre de la vista. Por ejemplo:
Supongamos que tenemos las tablas Grupo(id, nombre, curso), y Estudiante(id, nombre, edad, grupoId) en donde "grupoId" es llave foránea que hace referencia al id de Grupo; y que deseamos hacer una función que devuelva todos los datos de los estudiantes de un determinado grupo, sería:
Quiero que te fijes bien en lo que sucede en la segunda línea de la función:
RETURNS mi_vista AS ------ aquí lo que estamos diciendo es que la función devolverá una tabla que tiene la misma estructura que la vista "mi_vista".
Espero haberte ayudado en algo.
Un GigaSaludo!!!