Une insertion qui ne marche pas apres le trigger

Résolu/Fermé
raygouda Messages postés 69 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 27 août 2013 - 3 nov. 2012 à 23:32
raygouda Messages postés 69 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 27 août 2013 - 4 nov. 2012 à 13:32
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'

A voir également:

4 réponses

jee pee Messages postés 39648 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 238
4 nov. 2012 à 00:16
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
0
raygouda Messages postés 69 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 27 août 2013 1
4 nov. 2012 à 09:25
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
0
jee pee Messages postés 39648 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 238
4 nov. 2012 à 11:05
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
0
raygouda Messages postés 69 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 27 août 2013 1
4 nov. 2012 à 13:32
Merci Jee pee.
Tu as raison.C'est ça mon erreur je l'ai modifié et le programme tourne à merveille.
0