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?