-- Function: tehuelche.sp_ponderar(integer) -- DROP FUNCTION tehuelche.sp_ponderar(integer); CREATE OR REPLACE FUNCTION tehuelche.sp_ponderar(integer) RETURNS integer AS $BODY$ DECLARE NRO_SOLICITUD VARCHAR; NRO_REGLA VARCHAR; SQL VARCHAR; PONDERACION VARCHAR; -- Cursor que recupera las solicitudes a ponderar SOLICITUDES CURSOR FOR SELECT solicitud FROM sbc_ejecuciones_x_solicitud WHERE ponderacion_ejecutada = $1; -- Cursor que recupera las reglas de ponderación SQLs CURSOR FOR SELECT sre.nro_regla_ponderacion, srp.sql_variable FROM sbc_reglas_x_ejecucion sre, sbc_reglas_ponderacion srp WHERE sre.nro_regla_ponderacion = srp.nro_regla_ponderacion AND ponderacion_ejecutada = $1 ORDER BY sre.orden; BEGIN -- Si existen datos para la ponderación los borro DELETE FROM sbc_reglas_x_ejecuciones_x_solicitud WHERE ponderacion_ejecutada = $1; PONDERACION = $1; OPEN SOLICITUDES; FETCH SOLICITUDES INTO NRO_SOLICITUD; WHILE FOUND LOOP OPEN SQLs; FETCH SQLs INTO NRO_REGLA, SQL; WHILE FOUND LOOP SQL = replace(SQL, '$nro_regla', NRO_REGLA); SQL = replace(SQL, '$solicitud', NRO_SOLICITUD); SQL = replace(SQL, '$ponderacion_ejecutada', PONDERACION); EXECUTE SQL; FETCH SQLs INTO NRO_REGLA, SQL; END LOOP; CLOSE SQLs; FETCH SOLICITUDES INTO NRO_SOLICITUD; END LOOP; CLOSE SOLICITUDES; RETURN 1; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION tehuelche.sp_ponderar(integer) OWNER TO postgres;