Je suis en train de créer un déclencheur simple cx_Oracle qui copie les valeurs dans un tableau appelé étudiant quand une valeur est insérée dans la table studentTemp. Il n'y a que deux colonnes dans chaque table, à savoir stud_ID et stud_Name. Lorsque je tente d'insérer la valeur dans StudentTemp en utilisanterreur de déclenchement cx_Oracle
cur.execute("INSERT INTO studentTemp VALUES(1, 'Bob')")
Je reçois erreur DatabaseError: ORA-04098: déclenchement « S12345.INSERT_STUD » est invalide et a échoué revalidation. Voici le code
cur.execute('''CREATE OR REPLACE TRIGGER insert_Stud
AFTER INSERT ON studentTemp
FOR EACH ROW
BEGIN
INSERT INTO Student(Stud_ID,Stud_Name) VALUES
(:new.Stud_ID, :new.Stud_Name);
END;''')
J'ai aussi essayé
cur.execute('''CREATE OR REPLACE TRIGGER insert_Stud
AFTER INSERT ON studentTemp
REFERENCING NEW AS new
FOR EACH ROW
BEGIN
INSERT INTO Student(Stud_ID,Stud_Name) VALUES (:new.Stud_ID, :new.Stud_Name);
END;/''')
Mais toujours obtenir la même erreur
Je peux le faire fonctionner si j'utilise une procédure stockée comme celui-ci
# create insertStudent() stored procedure
cur.execute('''CREATE OR REPLACE PROCEDURE insertStudent(
sID IN STUDENT.STUDENT_ID%TYPE,
sName IN STUDENT.STUDENT_NAME%TYPE)
IS
BEGIN
INSERT INTO STUDENT VALUES(sID, sName);
END;''')
# create insert_Stud() trigger
cur.execute('''CREATE OR REPLACE TRIGGER insert_Stud
AFTER INSERT ON studentTemp
FOR EACH ROW
BEGIN
insertStudent(:new.Stud_ID, :new.Stud_Name);
END;''')
Quelqu'un peut-il me dire gentiment comment résoudre ce problème. Merci
Merci. Je l'ai corrigé mais je reçois toujours la même erreur. – Awais
Avez-vous la possibilité de vous connecter à la base de données avec SQL Developer? Vous pouvez ensuite compiler le déclencheur directement et obtenir des commentaires sur ce qui ne va pas – Pesse