Une insertion qui ne marche pas apres le trigger

[Résolu/Fermé]
Signaler
Messages postés
69
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
27 août 2013
-
Messages postés
69
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
27 août 2013
-
Bonjour, à tous

Voilà mon trigger puis le code sql pour comprendre son fonctionnement.

CREATE OR REPLACE TRIGGER trig_iud_SALLE
AFTER INSERT OR UPDATE OF IDSALLE OR DELETE
ON SALLE
FOR EACH ROW
BEGIN
IF (INSERTING) OR (UPDATING) THEN
UPDATE SEGMENT
SET NBSALLE = NBSALLE + 1
WHERE IDSEGMENT = :NEW.IDSEGMENT + 1;
END IF;
IF (DELETING) OR (UPDATING) THEN
UPDATE SEGMENT
SET NBSALLE = NBSALLE - 1
WHERE IDSEGMENT = :OLD.IDSEGMENT;
END IF;
END;
/
SHOW ERRORS;
L;


select * from SALLE;
select * from SEGMENT;

insert into salle values ('s04','Salle 4',3,'130.120.80');

select * from SALLE;
select * from SEGMENT;

delete from salle where idsalle='s04';

select * from SALLE;
select * from SEGMENT;



Apres exécution une erreur est survenue lors de la requête:
insert into salle values ('s04','Salle 4',3,'130.120.80');

Oracle affiche:


insert into salle values ('s04','Salle 4',3,'130.120.80')
*
ERREUR à la ligne 1 :
ORA-01722: Nombre non valide
ORA-06512: à "AGOUDA13.TRIG_IUD_SALLE", ligne 3
ORA-04088: erreur lors d'exécution du déclencheur 'AGOUDA13.TRIG_IUD_SALLE'

4 réponses

Messages postés
32571
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
3 août 2021
7 852
Salut,

Impossible de se prononcer, il nous manque des éléments :
- la description de la table SALLE, si le champ 2 est un number cela provoquerait une erreur, ...
- la description et le contenu de SEGMENT, si l'enregistrement s04 n'existe pas, si nbsalle est NULL, ...

cdlt
Messages postés
69
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
27 août 2013
1
A propos de la description de salle on a:

Nom NULL ? Type
IDSALLE NOT NULL VARCHAR2(7)
NOMSALLE VARCHAR2(30)
NBPOSTE NUMBER(3)
IDSEGMENT VARCHAR2(10)

Pour segment on a:

Nom NULL ? Type
IDSEGMENT NOT NULL VARCHAR2(10)
NOMSEGMENT VARCHAR2(20)
ETAGE NUMBER(2)
NBSALLE NUMBER(2)
NBPOSTE NUMBER(2)


Mais j'ai une chose que j'ai omis de dire.L'insertion fonctionne correctement lorsque je supprime le trigger l'insertion fonctionne correctement.Mais je me demande pourquoi l'insertion ne fonctionne pas lors de la création du trigger?

cdlt
Messages postés
32571
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
3 août 2021
7 852
c'est ça :

WHERE IDSEGMENT = :NEW.IDSEGMENT + 1;

tu fais plus 1 sur une chaine de caractère !

c'est pas tout simplement :

WHERE IDSEGMENT = :NEW.IDSEGMENT
Messages postés
69
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
27 août 2013
1
Merci Jee pee.
Tu as raison.C'est ça mon erreur je l'ai modifié et le programme tourne à merveille.