HOLA.
  
tengo un procedimiento almacenado, el cual puede ejecutar 3 query diferentes, estos a su ves son variables en los campos del select. el procedimiento debe retorna los registros del query que ejecute. 
colocar el nombre de la tabla en el tipo de retorno no puedo, porque la conuslta segun el query es a una tabla distinta. 
por ahora tengo cree un tipo con la maxima cantidad de datos del select que retorno, lo cual me obligo a usar comodines en los otros querys.  
es decir que si en el tipo creado tengo los campos A,B,C,D,E,F Y en el query Uno retorno todos los campos, pero en el query dos retorno SOLO A,B,C,'','',F Y EN el tercer query el select queda por ejemplo asi A,'',B,C,D,'',F. 
ADJUNTO EL PROCEDIMIENTO REAL    
Código SQL:
Ver original- CREATE OR REPLACE FUNCTION p_get_blocks_count(INTEGER, VARCHAR,VARCHAR,VARCHAR,VARCHAR) RETURNS SETOF t_blocks_count AS $BODY$ 
- DECLARE  
-     FILTER              ALIAS FOR $1;   
-     area_list           ALIAS FOR $2; 
-     city_list           ALIAS FOR $3; 
-     socioeconomic_list  ALIAS FOR $4; 
-     country             ALIAS FOR $5; 
-      
-     sql_query VARCHAR; 
-     query_result t_blocks_count; 
- BEGIN 
-     IF FILTER = 1 THEN 
-         sql_query := '  SELECT  country_name,region_name,city_name,locale_name,locale_code,$$''$$,$$''$$,socioeconomic_status,city_code,total 
-                         FROM    conteo_manzanas_localidad_'||country||' 
-                         WHERE   locale_code             IN ('||area_list||') AND  
-                                 city_code               IN ('||city_list||') AND 
-                                 socioeconomic_status    IN ('||socioeconomic_list||')'; 
-         FOR query_result IN EXECUTE sql_query LOOP RETURN NEXT query_result; 
-         END LOOP;            
-     ELSE 
-         IF FILTER = 2 THEN 
-             sql_query := '  SELECT  country_name,region_name,city_name,locale_name,locale_code,neighborhood_name,neighborhood_code,socioeconomic_status,city_code,total 
-                             FROM    conteo_manzanas_barrio_'||country||' 
-                             WHERE   neighborhood_code       IN ('||area_list||') AND  
-                                     city_code               IN ('||city_list||') AND 
-                                     socioeconomic_status    IN ('||socioeconomic_list||')'; 
-             FOR query_result IN EXECUTE sql_query LOOP RETURN NEXT query_result; 
-             END LOOP; 
-         ELSE 
-             sql_query := '  SELECT  country_name,region_name,city_name,$$''$$,$$''$$,$$''$$,$$''$$,socioeconomic_status,city_code,total 
-                             FROM    conteo_manzanas_municipio_'||country||' 
-                             WHERE   city_code               IN ('||city_list||') AND 
-                                     socioeconomic_status    IN ('||socioeconomic_list||')'; 
-             FOR query_result IN EXECUTE sql_query LOOP RETURN NEXT query_result; 
-             END LOOP; 
-         END IF; 
-     END IF;  
-     RETURN; 
- END $BODY$ 
- LANGUAGE plpgsql; 
existe alguna forma de evitar eso?