Saludos en esta ocación me dirijo a ustedes con el siguiente problema:
Tengo una función en la cual un query es armado segun los parametros que tengan valor que son enviados a la función, necesito retornar un conjunto de registros para lo cual utilizo un for pero al realizar la concatenación del query y luego trato de ejecutarlo con el execute parece ser que este comando no reconoce la sentencia for porq justa da error en el primer caracter del query... a continuación coloco la función:
CREATE OR REPLACE FUNCTION "public"."rep_organizacion" (fecha_inicial date, fecha_final date, cod_organizacion integer, cod_categoria integer) RETURNS SETOF "pg_catalog"."record" AS
$body$
DECLARE
roworganizacion RECORD;
tira varchar(8000);
st_fechaIniciales varchar(60);
st_fechaFinales varchar(60);
inl_organizaciones varchar(60);
inl_categoEquipos varchar(60);
BEGIN
tira := 'FOR roworganizacion IN SELECT t_datos_presupuesto.codigo_relacion,
t_datos_presupuesto.codigo_indicador,
t_datos_presupuesto.cantid_equipo, t_datos_presupuesto.cantid_intervalo,
t_datos_presupuesto.fecha_final, t_datos_presupuesto.fecha_inicio,
t_clase_equipo.nombre_clase_equipo, t_catego_equipo.codigo_catego_equipo,
t_catego_equipo.nombre_catego_equipo, t_tipo_esfuerzo.nombre_tipo_esfuerzo,
t_orden_esfuerzo.nombre_orden_esfuerzo, t_ceco.ceco, t_organizacion.codigo_organizacion,
SUM((CASE codigo_tipo_medicion WHEN 1 THEN valor_medida ELSE 0 END)) AS suma1,
SUM((CASE codigo_tipo_medicion WHEN 2 THEN valor_medida ELSE 0 END)) AS suma2,
SUM((CASE codigo_tipo_medicion WHEN 3 THEN valor_medida ELSE 0 END)) AS suma3,
SUM((CASE codigo_tipo_medicion WHEN 4 THEN valor_medida ELSE 0 END)) AS suma4,
SUM((CASE codigo_tipo_medicion WHEN 5 THEN valor_medida ELSE 0 END)) AS suma5,
SUM((CASE codigo_tipo_medicion WHEN 6 THEN valor_medida ELSE 0 END)) AS suma6,
SUM((CASE codigo_tipo_medicion WHEN 7 THEN valor_medida ELSE 0 END)) AS suma7
FROM t_datos_presupuesto, t_datos_relacion, t_clase_equipo, t_catego_equipo,
t_natura_esfuerzo, t_esfuerzo, t_tipo_esfuerzo, t_orden_esfuerzo, t_ceco,
t_organizacion, t_datos_medicion
WHERE t_datos_presupuesto.codigo_relacion = t_datos_relacion.codigo_relacion
AND t_datos_relacion.codigo_clase_equipo = t_clase_equipo.codigo_clase_equipo
AND t_clase_equipo.codigo_catego_equipo = t_catego_equipo.codigo_catego_equipo
AND t_datos_relacion.codigo_natura_esfuerzo = t_natura_esfuerzo.codigo_natura_esfuerzo
AND t_natura_esfuerzo.codigo_esfuerzo = t_esfuerzo.codigo_esfuerzo
AND t_esfuerzo.codigo_tipo_esfuerzo = t_tipo_esfuerzo.codigo_tipo_esfuerzo
AND t_esfuerzo.codigo_orden_esfuerzo = t_orden_esfuerzo.codigo_orden_esfuerzo
AND t_datos_relacion.codigo_ceco = t_ceco.codigo_ceco
AND t_ceco.codigo_organizacion = t_organizacion.codigo_organizacion
AND t_datos_presupuesto.codigo_relacion = t_datos_medicion.codigo_relacion
GROUP BY t_ceco.ceco, t_orden_esfuerzo.nombre_orden_esfuerzo,
t_tipo_esfuerzo.nombre_tipo_esfuerzo, t_clase_equipo.nombre_clase_equipo,
t_datos_presupuesto.cantid_equipo, t_datos_presupuesto.cantid_intervalo,
t_datos_presupuesto.codigo_indicador, t_datos_presupuesto.fecha_final,
t_catego_equipo.codigo_catego_equipo, t_catego_equipo.nombre_catego_equipo,
t_datos_presupuesto.fecha_inicio, t_organizacion.codigo_organizacion,
t_datos_presupuesto.codigo_relacion';
if(fecha_inicial <> NULL)THEN
tira := tira||' HAVING (t_datos_presupuesto.fecha_inicio >= '''||fecha_inicial||''')';
END if;
if(fecha_final <> NULL)THEN
tira := tira||' AND (t_datos_presupuesto.fecha_final <= '''||fecha_final||''')';
END if;
if(cod_organizacion <> 0)THEN
tira := tira||' AND (t_organizacion.codigo_organizacion = '||cod_organizacion||')';
end if;
if(cod_categoria <> 0)THEN
tira := tira||' AND (t_catego_equipo.codigo_catego_equipo = '||cod_categoria||')';
end if;
tira := tira||'ORDER BY t_catego_equipo.codigo_catego_equipo ASC, t_ceco.ceco ASC,
t_orden_esfuerzo.nombre_orden_esfuerzo ASC, t_clase_equipo.nombre_clase_equipo ASC
LOOP
RETURN NEXT roworganizacion;
END LOOP;';
EXECUTE tira;
RETURN;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
A ver amigos en que me pueden ayudar de verdad ya estoy de cabeza y no se que hacer