Buenas a todos, ¿que tal huesos52?. Ya he conseguido que 'ande', pero le quedan retoques. Ahí va.
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION trastea1(text) RETURNS INTEGER AS
$BODY$
/*para hacer pruebas*/
DECLARE
e INTEGER;
SQL text;
cur refcursor;
BEGIN
SQL := 'SELECT ST_SRID('|| $1||'.geom) FROM work.'|| $1||'';
OPEN cur FOR EXECUTE SQL;
loop
fetch cur INTO e;
IF NOT found THEN
close cur;
EXIT;
END IF;
RETURN e;
END loop;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE STRICT;
ALTER FUNCTION trastea1(text) OWNER TO postgres;
Lógicamente, tal como está planteado el código devuelve siempre el primer registro y sobra el loop. Pero resulta que si saco 'RETURN e;' fuera del loop, me devuelve null (lógico). Supongo que se solucionará con un do while (todo se andará).
Mi pregunta: ¿sería posible que en la declaración de la función, el tipo de dato a devolver no esté definido?, ¿tal vez una declaración dinámica?.
Me explico: en este caso estoy comprobando el valor de un campo, dado que el campo está definido como integer, la función debe devolver un integer. Pero si quiero comprobar un campo definido como varchar, ya no me valdría. ¿alguna idea?.
Gracias a todos.