-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- SIU-GUARANI 3 -- Version 3.0.0 -- Function: get_plan_version_alumno -- -- Recupera los elementos que consituyen una version de plan de estudios. -- -- Recibe: -- get_plan_version_alumno(integer, varchar(10)) -- 1.- ID Alumno -- 1.- Fecha formato yyyy-mm-dd -- -- Retorna: Version del Plan en el que se encuentra el alumno en una fecha. -- -- Ejemplo: select * from get_plan_version_alumno(2, '2010-03-25') -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- DROP FUNCTION get_plan_version_alumno(integer, varchar(10)); CREATE OR REPLACE FUNCTION get_plan_version_alumno(_alumno integer, _sfecha varchar(10)) RETURNS integer AS $BODY$ DECLARE _plan_version integer; DECLARE _fecha date; BEGIN _plan_version := NULL; IF _alumno IS NULL OR _sfecha IS NULL OR _sfecha = '' THEN RETURN _plan_version; END IF; -- Convierto la fecha a date. La fecha debe venir en formato: yyyy-mm-dd _fecha := _sfecha::date; -- Busco el plan y version del alumno para la fecha dada. -- Recupera la maxima fecha de cambio de plan/version que sea menor o igual a la fecha a buscar. -- En el caso que exista mas de un cambio de version el mismo dia, tomara el ultimo cambio de ese dia. SELECT plan_version INTO _plan_version FROM sga_alumnos_hist_planes WHERE alumno = _alumno AND fecha = (SELECT max(sga_alumnos_hist_planes.fecha) FROM sga_alumnos_hist_planes WHERE sga_alumnos_hist_planes.alumno = _alumno AND Cast(sga_alumnos_hist_planes.fecha as date) <= _fecha ); -- Si no encontró el plan y version del alumno en la fecha indicada, recupero el plan y version actual IF NOT FOUND THEN SELECT plan_version INTO _plan_version FROM sga_alumnos WHERE alumno = _alumno; END IF; -- Retorno la version de plan del alumno RETURN _plan_version; END $BODY$ LANGUAGE 'plpgsql' VOLATILE; -- ++++++++++++++++++++++++++++++++ Fin Function get_plan_version_alumno(integer, varchar(10)) ++++++++++++++++++++++++ -- REVOKE EXECUTE ON FUNCTION get_plan_version_alumno (integer, varchar(10)) FROM public; GRANT EXECUTE ON FUNCTION get_plan_version_alumno (integer, varchar(10)) to public;