Bonjour,
j'ai créé mon premier trigger avec un curseur à l'intérieur :
la partie du code qui pose problème est en rouge.
L'exécution du code suivant donne les messages d'erreur suivants :
LINE/COL ERROR
27/1 PL/SQL: Statement ignored
27/28 PLS-00405: sous-interrogation non autorisée dans ce contexte
31/1 PL/SQL: Statement ignored
31/23 PLS-00405: sous-interrogation non autorisée dans ce contexte
39/1 PL/SQL: Statement ignored
39/24 PLS-00405: sous-interrogation non autorisée dans ce contexte
/* mon trigger :*/
create or replace trigger trigger_inscription
before update or insert on inscription
for each row
declare
nbre_etud number(2,0);
nbre_module number(2,0);
cursor curseur_prerequis is select codmodpreq from prerequis start with codmod = :new.codmod connect by prior codmodpreq=codmod;
codmod_du_curseur prerequis.codmod%type;
begin
/*Test si les modules prerequis sont présents dans la table inscription : */
open curseur_prerequis;
loop
fetch curseur_prerequis into codmod_du_curseur;
exit when curseur_prerequis%notfound;
if codmod_du_curseur not in(select codmod from inscription where numetud=:new.numetud)
then raise_application_error ( -20003,'Erreur cet étudiant ne s est pas inscrit dans un(ou les) module(s) prerequis');
end if;
if :new.numetud not in(
select e.numetud from etudiant e
where not exists(select ex.codmod from examen ex where ex.codmod=codmod_du_curseur and not exists(
select r.numetud,r.codexam from resultat r,module m where e.numetud=r.numetud
and ex.codexam=r.codexam)))
then raise_application_error ( -20004,'Erreur cet étudiant n a pas passé tous les examens dans un des modules prerequis');
end if;
if :new.numetud not in (select num_etudiant from vue_trigger3 where code_module=codmod_du_curseur)
then raise_application_error ( -20005,'Erreur cet étudiant n a pas la moyenne (noteprerequis) dans un des modules prerequis');
end if;
end loop;
close curseur_prerequis;
end;/
C'EST AU NIVEAU DES 3 IF DANS LE CURSEUR QUE CA COINCE.
JE NE SAIS PAS SI CE TYPE DE REQUETE EST AUTORISEE ICI.
MERCI DE VOTRE AIDE D'AVANCE
Partager