Boa tarde.
Estou com um problema na hora de criar uma Trigger para validar se o aluno pode cursar determinada matéria que tem como pré requisito outra.
Estou conseguindo validar quando o Aluno tenta se inscrever na matéria e foi reprovado na que é pre requisito.
Mas quando eu tento validar quando o Aluno tenta se inscrever na matéria e foi aprovado na que é pre requisito na segunda tentativa dá erro.
Já revirei o código inteiro tentando localizar o erro. Creio que seja erro de sintaxe.
Tentei usar o IF, compilou mas não fez a validação que eu quero. Daí fui pro CASE compilou mas também não fez a validação que eu quero.
Segue código:
create or replace TRIGGER "VALIDA_INSCRICAO"
BEFORE INSERT ON ALUNO_INSCRICAO_MATERIA
REFERENCING NEW AS NEW
FOR EACH ROW
DECLARE
v_CD_materia char(6);
CURSOR TESTA_INSC IS
SELECT H.ID_MATRICULA, H.CD_MATERIA, H.VL_GRAU_FINAL
FROM HISTORICO H
where H.ID_MATRICULA = :new.ID_MATRICULA
AND CD_MATERIA = v_CD_materia;
CURSOR TESTA_PREREQ IS
SELECT pr.CD_MATERIA_pre_requisito
FROM PRE_REQUISITO PR
where cd_materia = :new.cd_materia;
BEGIN
FOR AUX IN testa_prereq LOOP
v_CD_materia := AUX.CD_MATERIA_PRE_REQUISITO;
for HIST IN TESTA_INSC LOOP
case
when hist.VL_GRAU_FINAL in ('A','B','C','CC') then Dbms_output.put_line ('INSCRIÇÃO REALIZADA COM SUCESSO');
else RAISE_APPLICATION_ERROR (-20101, 'ALUNO' || TO_CHAR(:new.ID_MATRICULA) || 'NÃO POSSUI A MATÉRIA' || AUX.CD_MATERIA_PRE_REQUISITO || 'QUE É PRÉ-REQUISITO DA MATÉRIA' || :new.cd_materia);
end case;
end loop;
end loop;
END;
Desde já agradeço.
Tenham uma boa noite.