A_PASSOS Posted April 14, 2015 Report Share Posted April 14, 2015 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. Quote Link to comment Share on other sites More sharing options...
Question
A_PASSOS
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.
Link to comment
Share on other sites
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.