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

Cursor

Estas en el tema de Cursor en el foro de PostgreSQL en Foros del Web. CURSOR Hola a todos, a ver si me podeis ayudar, me mandan hacer un cursor en el que se cuente cuantos alumnos han estado mas ...
  #1 (permalink)  
Antiguo 16/04/2013, 04:45
 
Fecha de Ingreso: diciembre-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 0
Cursor

CURSOR

Hola a todos, a ver si me podeis ayudar, me mandan hacer un cursor en el que se cuente cuantos alumnos han estado mas de un curso en el colegio y segregado por ciclo.

Nos hacen crear el tipo de dato llamado cuantosalumnos -->

CREATE TYPE cuantosalumnos AS (
ciclo character(10),
cuantos integer);

Y tenemos las tablas:

docencia.modulo (codigoModulo, descripcionModulo, ciclo)
alumnado.matricula (alumno, periodo, modulo)

Y las consideraciones que nos dan es:

Que la función ha de devolver un tipo set del tipo creado.
Que tenemos que utilizar un cursor construido con un SELECT de unión de las tablas docencia.modulo y alumnado.matricula
El cursor ha de recorrer y ir contando cuantos alumnos han estado mas de un ciclo (pensar en variables que hagan de acumuladores temporales)
No se pueden hacer servir subconsultas ni GROUP BY.

Creamos la funcion con el cursor... He hecho esto, pero no se que deberia poner en el IF, alguien me puede orientar???


CREATE OR REPLACE FUNCTION docencia.ciclealumnes()
RETURNS SETOF cuantosalumnos AS $$
DECLARE
resultat cuantosalumnos;
numalumnes integer;
mimodul RECORD;
cursor1 CURSOR FOR SELECT * FROM alumnado.matricula
UNION ALL SELECT * FROM docencia.moduol WHERE modulo="codigoModul";

BEGIN
IF()THEN
END IF;

OPEN cursor1;
LOOP
FETCH cursor1 INTO mimodul;
EXIT WHEN NOT FOUND;
SELECT count(*) INTO resultat.cuantos FROM alumnado.matricula a WHERE a.alumno = mimodul."codigoAlumno" ;
RETURN NEXT resultat;
END LOOP;
CLOSE cursor1;
END;
$$ LANGUAGE plpgsql VOLATILE

Última edición por irla_bcn; 16/04/2013 a las 04:50

Etiquetas: as, cursor, dato, funcion, sql, tabla
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:00.