Hola rProgged, puedes usar un bloque IF para discernir si usar el LIMIT o no en la consulta, te pongo un ejemplo de tu código modificado:
Código:
CREATE OR REPLACE FUNCTION funcionprueba(integer, integer, integer) RETURNS SETOF RECORD AS $$
DECLARE
id_area ALIAS FOR $1;
inicio ALIAS FOR $2;
fin ALIAS FOR $3;
datos RECORD;
BEGIN
IF(inicio = null and fin = null) THEN
FOR datos IN
SELECT nombre, visitas
FROM tabla
WHERE id=id_area
LOOP
RETURN NEXT datos;
END LOOP;
ELSE
FOR datos IN
SELECT nombre, visitas
FROM tabla
WHERE id=id_area LIMIT inicio OFFSET final
LOOP
RETURN NEXT datos;
END LOOP;
END IF;
RETURN;
END;
$$ LANGUAGE plpgsql VOLATILE;
Para llamar la consulta sin el LIMIT lo haces así:
Código:
select * from funcionprueba(1,null,null) as (nombre varchar, visitas integer);
Para llamar a la consulta con el LIMIT:
Código:
select * from funcionprueba(1,10,0) as (nombre varchar, visitas integer);
Espero que te sirva.