Trigger
Fermé
lemega
Messages postés
85
Date d'inscription
mardi 13 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2023
-
29 juin 2012 à 19:36
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 - 29 juin 2012 à 20:44
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 - 29 juin 2012 à 20:44
A voir également:
- Trigger
- Assistant trigger - Guide
- Trigger Oracle : la fonction renvoie NULL - Forum Oracle
1 réponse
DROE
Messages postés
148
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
26 juillet 2012
48
Modifié par DROE le 29/06/2012 à 20:50
Modifié par DROE le 29/06/2012 à 20:50
Hello,
je pense que tu as 2 problèmes.
le premier :
Ici tu as l'erreur ORA-01422 car cette requête (sans utiliser de Cursor) doit impérativement retourner 1 seul enregistrement et ici il t'en retournera plus d'un si plusieurs salariés ont ce même salaire.
http://www.dba-ora.fr/article-oracle-plsql-select-into-statement-73250860.html
http://www.dba-ora.fr/article-oracle-plsql-no_data_found-too_many_rows-exceptions-74004716.html
Le deuxième problème:
A chaque insertion de ligne tu vas augmenter le salaire de plusieurs salariés et cela plusieurs fois. (de plus tu ne pourras déclencher un update sur une table qui à déclencher le trigger, donc pas d'update sur emp)
je pense que tu veux augmenter le salaire de la ligne que tu insères uniquement:
dans ce cas c'est en changeant la valeur des :NEW :
DROE
L'expérience, c'est le nom que chacun donne à ses erreurs
je pense que tu as 2 problèmes.
le premier :
SELECT sal, deptno INTO v_sal, v_comm FROM Emp WHERE sal = :NEW.sal;
Ici tu as l'erreur ORA-01422 car cette requête (sans utiliser de Cursor) doit impérativement retourner 1 seul enregistrement et ici il t'en retournera plus d'un si plusieurs salariés ont ce même salaire.
http://www.dba-ora.fr/article-oracle-plsql-select-into-statement-73250860.html
http://www.dba-ora.fr/article-oracle-plsql-no_data_found-too_many_rows-exceptions-74004716.html
Le deuxième problème:
A chaque insertion de ligne tu vas augmenter le salaire de plusieurs salariés et cela plusieurs fois. (de plus tu ne pourras déclencher un update sur une table qui à déclencher le trigger, donc pas d'update sur emp)
je pense que tu veux augmenter le salaire de la ligne que tu insères uniquement:
dans ce cas c'est en changeant la valeur des :NEW :
CREATE TRIGGER TrigAugSal BEFORE INSERT ON Emp FOR EACH ROW BEGIN IF (:NEW.comm > :NEW.sal*0.5) THEN :NEW.sal := :NEW.sal*1.1; END IF; END; /
DROE
L'expérience, c'est le nom que chacun donne à ses erreurs