Ver Mensaje Individual
  #23 (permalink)  
Antiguo 13/04/2011, 11:55
nessemar
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 14 años
Puntos: 0
Respuesta: plpgsql: filtrar una consulta según otra consulta

Buenas a todos, ¿que tal huesos52?. Ya he conseguido que 'ande', pero le quedan retoques. Ahí va.

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION trastea1(text) RETURNS INTEGER AS
  2. $BODY$
  3. /*para hacer pruebas*/
  4. DECLARE
  5.     e INTEGER;
  6.     SQL text;
  7.     cur refcursor;
  8. BEGIN
  9.         SQL := 'SELECT ST_SRID('|| $1||'.geom) FROM work.'|| $1||'';
  10.         OPEN cur FOR EXECUTE SQL;
  11.         loop
  12.         fetch cur INTO e;
  13.         IF NOT found THEN
  14.             close cur;
  15.             EXIT;
  16.         END IF;
  17.         RETURN e;
  18.         END loop;
  19. END;
  20. $BODY$
  21. LANGUAGE 'plpgsql' VOLATILE STRICT;
  22. 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.