Une insertion qui ne marche pas apres le trigger

Résolu
raygouda Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   -  
raygouda Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   -
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 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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   Statut Membre Dernière intervention   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
0
jee pee Messages postés 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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   Statut Membre Dernière intervention   1
 
Merci Jee pee.
Tu as raison.C'est ça mon erreur je l'ai modifié et le programme tourne à merveille.
0