srf procesar setof antes de mostrar el resultado

From: H3cT0r <hector(dot)arnaldo(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: srf procesar setof antes de mostrar el resultado
Date: 2006-03-11 16:36:26
Message-ID: d62a87e70603110836j10c4f580l@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

hola, lista, desde ya agradecido por los consejos.
Les paso a contar mi inquietud:
tengo una tabla, la cual es cronologia con fecha y hora con la siguiente
estructura:

legajo int4,
fecha date(),
hora time,

He realizado funcion SRF que me permite listar los datos mencionado segun el
campo legajo, un rango de fechas y un codigo de lugar de trabajo para
saber la asistencia y total de horas trabajadas de una persona, la funcion
es la siguiente:

create or replace function marcacion(date, date, text, text)
RETURNS SETOF registrodiario AS
'
DECLARE
myrecord RegistroDiario;
marcacion RegistroDiario;
fecha_i alias for $1;
fecha_f alias for $2;
codalc alias for $3;
unidad alias for $4;

BEGIN
For myrecord in Execute \'Select Fecha,Hora
from horario where legajo =\'|| codalc || \'and fechao >=\'||
quote_literal(fecha_i) || \'
and fecha <= \'|| quote_literal(fecha_f) ||\'and codtrabaj =\'||
unidad
order by myrecord.fecha,myrecord.hora Loop
return next myrecord;
end loop;
Return ;
END
'
LANGUAGE 'plpgsql' STABLE;
la funcion marcacion('2005-04-01','2005-04-30','353','1'), con estos datos
tiene una salida como la siguiente:

fecha marca
04/04/2005 13:25:04
05/04/2005 07:26:16
05/04/2005 13:29:02
06/04/2005 07:10:36
06/04/2005 13:14:11
07/04/2005 07:18:58
07/04/2005 13:10:30
08/04/2005 07:24:09
08/04/2005 13:16:30
11/04/2005 07:08:36
11/04/2005 13:32:10
12/04/2005 07:12:32
12/04/2005 10:20:15
12/04/2005 11:40:10
12/04/2005 13:11:41

La cuestion es la siguiente:

Necesito procesar los registro para que tenga una salida como la siguiente,
antes de mostrar la consulta:

fecha marca1 marca2
04/04/2005 13:25:04 00:00:00
05/04/2005 07:26:16 13:29:02
06/04/2005 07:10:36 13:14:11
07/04/2005 07:18:58 13:10:30
08/04/2005 07:24:09 13:16:30
11/04/2005 07:08:36 13:32:10
12/04/2005 07:12:32 10:20:15
12/04/2005 11:40:10 13:11:41

He intentado tomar la información en el setof myrecord, y dentro del loop
copiarlo al setof marcacion de acuerdo a la siguiente logica
fecha_anterior := marcacion.fecha
marcacion.Fecha= myrecord.fecha
if myrecord.fecha = marcacion.Fecha then
marcacion.marca2 := myrecord.marca1
else
marcacion.fecha:= myrecord.fecha
marcacion.marca1 := myrecord.marca1
end if

El caso es que no funciona, es muy probable que la logica del if pueda ser
mejorada, pero mi gran duda es si puedo hacer este tipo de control
trabajando con con un ciclo "For in record execute". Agradezco desde ya su
ayuda

Hector

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2006-03-11 17:40:40 Re: Version de POstgresQL para win98
Previous Message Alvaro Herrera 2006-03-11 16:24:19 Re: plpython