en realidad lo que necesito es un trigger que al incertar el valor del semestral(S) en la tabla notas realice las siguientes acciones:
1.- saque el promedio por TIPO DE NOTA, y lo multiplique por el porcentaje respectivo
2.- sume todos los resultados de la operacion anterior para obtener una NOTA TOTAL,
3.- transforme esa NOTA TOTAL, en NOTA FINAL (A,B,C,D O F)
4.- incerte los valores en la tabla TMP
aqui esta la estructura de mi base de datos y el trigger que yo cree:
Tablas:
DISTRIBUCION_DE_NOTAS
TIPO_NOTA CHAR(1),pk (ESTO ES PARA DIFERENCIAR ENTRE P DE PARCIAL, L DE LABORATORIO, Q DE QUIZ Y S DE SEMESTRAL)
DESCRIPCION(VARCHAR2(15)
PORCENTAJE NUMBER(5,2);
ESTUDIANTES
NUMERO NUMBER(5),pk
NOMBRE VARCHAR2(15),
APELLIDO VARCHAR2(15),
CEDULA VARCHAR2(15),
S_SOCIAL VARCHAR2(15),
E_MAIL VARCHAR2(15);
NOTAS
NUMERO NUMBER(5) fk_ESTUDIANTES
TIPO_NOTA CHAR(1), fk_DISTRIBUCION_DE_NOTAS
FECHA DATE,
VALOR NUMBER(5,2), (AQUI VA CUANTO SACO EL ALUMNO EN DICHA EVALUACION)
TMP_ESTUDIANTES_PRO_FINAL
NUMERO NUMBER(5) fk_ESTUDIANTES,
NOMBRE VARCHAR2(15),
APELLIDO VARCHAR2(15),
PRO_FINAL NUMBER(5,2),
NOTA_FINAL CHAR(1) (AQUI SE COLOCA SI LA NOTA FINAL DEL ESTUDIANTE ES A, B, C, D O F)
EL TRIGGER ES
Código SQL:
Ver original
CREATE OR REPLACE TRIGGER t_nota_final BEFORE INSERT OR UPDATE ON NOTAS FOR EACH ROW WHEN (NEW.TIPO_NOTA='S') DECLARE nota_final CHAR (1); CURSOR c_notas IS SELECT E.NOMBRE, E.APELLIDO, N.TIPO_NOTA, SUM(AVG(N.VALOR) * D.PORCENTAJE/100) TOTAL_NOTA FROM ESTUDIANTES E, NOTAS N, DISTRIBUCION_DE_NOTAS D WHERE E.NUMERO = :NEW.NUMERO AND N.NUMERO = :NEW.NUMERO AND N.TIPO_NOTA = D.TIPO_NOTA GROUP BY E.NOMBRE,E.APELLIDO,N.TIPO_NOTA; BEGIN FOR i IN c_notas LOOP IF (i.TOTAL_NOTA < 61 ) THEN nota_final := 'F'; ELSIF (i.TOTAL_NOTA < 71 ) THEN nota_final := 'D'; ELSIF (i.TOTAL_NOTA < 81 ) THEN nota_final := 'C'; ELSIF (i.TOTAL_NOTA < 91 ) THEN nota_final := 'B'; ELSE nota_final := 'A'; END IF; INSERT INTO TMP_ESTUDIANTES_PRO_FINAL VALUES ( :NEW.NUMERO, i.NOMBRE, i.APELLIDO, i.TOTAL_NOTA, nota_final); END LOOP; END;
a pesar de que compila bien, el trigger no funciona.... por favor diganme que hice mal