Está en la página 1de 2

2.

Realizar un bloque que permita modificar el valor de los tipos de


evaluaci�n teniendo en cuenta la siguiente tabla:
Evaluaci�n valor actual valor a modificar
Previos 0 < valor < 50 +2
Previos 50 <= valor < 70 +5
Previos valor >= 70 -1
Quices 0 < valor < 20 +5
Quices 20 <= valor < 30 +3
Quices valor >= 30 -5
Trabajos 0 <= valor < 30 +4
Trabajos valor >= 30 -6
Examen Cualquier valor +5

DECLARE

v_descripcion tipoevaluacion.descripcion%TYPE;
v_valor tipoevaluacion.valor%TYPE;
v_id tipoevaluacion.id%TYPE;

V_valor_nuevo NUMBER(2):=0;

CURSOR c_tipo_evaluacion IS
SELECT id, UPPER(descripcion), valor
FROM tipoevaluacion;

BEGIN

OPEN c_tipo_evaluacion;

LOOP
FETCH c_tipo_evaluacion INTO v_id,v_descripcion,v_valor;

EXIT WHEN c_tipo_evaluacion%NOTFOUND;

IF (v_descripcion LIKE 'PREVIO%' AND v_valor BETWEEN 1 AND 49) THEN


v_valor_nuevo:=2;
ELSIF (v_descripcion LIKE 'PREVIO%' AND v_valor BETWEEN 50 AND 69) THEN
v_valor_nuevo:=5;
ELSIF (v_descripcion LIKE 'PREVIO%' AND v_valor >= 70) THEN
v_valor_nuevo:=-1;
ELSIF (v_descripcion LIKE 'QUI%' AND v_valor BETWEEN 1 AND 19) THEN
v_valor_nuevo:=5;
ELSIF (v_descripcion LIKE 'QUI%' AND v_valor BETWEEN 20 AND 29) THEN
v_valor_nuevo:=3;
ELSIF (v_descripcion LIKE 'QUI%' AND v_valor >= 30) THEN
v_valor_nuevo:=-5;
ELSIF (v_descripcion LIKE 'TRABAJO%' AND v_valor BETWEEN 0 AND 29) THEN
v_valor_nuevo:=4;
ELSIF (v_descripcion LIKE 'TRABAJO%' AND v_valor >= 30) THEN
v_valor_nuevo:=-6;
ELSIF (v_descripcion LIKE 'EXAM_N%') THEN
v_valor_nuevo:=5;
END IF;

UPDATE tipoevaluacion
SET valor=valor+v_valor_nuevo
WHERE id=v_id;
v_valor_nuevo:=0;

END LOOP;
CLOSE c_tipo_evaluacion;
COMMIT;
END;
/

sdd-fanatico.org

También podría gustarte