Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Uso del execute en PLPGSQL

Estas en el tema de Uso del execute en PLPGSQL en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/03/2006, 09:37
 
Fecha de Ingreso: enero-2004
Mensajes: 71
Antigüedad: 20 años, 3 meses
Puntos: 0
Uso del execute en PLPGSQL

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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:08.