Erreurs lors d'exécution d'un trigger
bonjour;
le sujet: écrire une trigger de contrainte sur la table poste permettant de refuser l'ajout d'un nouveau poste si la salle(idsalle) n'est traversée par le segment (idsegment) et si le nombre de poste de la salle dépasse 14.
les tables de ma base de donnée:
table poste:
IDPOSTE NOMPOSTE IDSEGMENT AD TYPEPOSTE IDSALLE NBLOG
p1 Poste 1 130.120.80 01 TX s01 0
p2 Poste 2 130.120.80 02 LINUX s01 2
p3 Poste 3 130.120.80 03 TX s01 0
table salle:
IDSALLE NOMSALLE NBPOSTE IDSEGMENT
s01 Salle 1 3 130.120.80
s02 Salle 2 2 130.120.80
s03 Salle 3 2 130.120.80
s11 Salle 11 2 130.120.81
s21 Salle 21 2 130.120.82
voila le trigger que j'ai créer:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| CREATE OR REPLACE Trig_Ins_Poste
BEFORE INSERT ON Poste
FOR EACH ROW
DECLARE
v_nbPos Salle.nbPoste%TYPE;
v_idSeg Salle.idSegment%TYPE;
BEGIN
SELECT nbPoste, idSegment INTO v_nbPos, v_idSeg
FROM Salle
WHERE idSalle = :NEW.idSalle;
IF v_idSeg != :NEW.idSegment THEN
DBMS_OUTPUT.PUT_LINE ('La Salle: '||:NEW.idSalle||' n''est pas traversée par le segment:'||:NEW.idSegment||'!');
AND
IF v_bPos > 14 THEN
DBMS_OUTPUT.PUT_LINE ('La Salle: '||:NEW.idSalle||' a un nombre poste supérieur à 14');
END IF;
END IF;
END;
/
SHOW ERRORS ;
L; |
il m'as afficher:
ERREUR à la ligne 1 :
ORA-00922: option erronée ou absente
SP2-0851: La commande commençant par "v_idSeg Sa..." n'est pas disponible dans iSQL*Plus
SP2-0552: Variable de lien "NEW" non déclarée.
merci.
Aidez-moi à corriger l'erreur de ce déclencheur !
bonjour;
Trigger de contrainte sur la table poste permettant de refuser l’ajout d’un nouveau poste si la salle (idsalle) n’est pas traversée par le segment (idsegment) et si le nombre de postes de la salle dépasse 14.
les table poste contient les colonnes suivantes:
IDPOSTE NOMPOSTE IDSEGMENT AD TYPEPOSTE IDSALLE NBLOG
p1 Poste 1 130.120.80 01 TX s01 0
p2 Poste 2 130.120.80 02 LINUX s01 2
p3 Poste 3 130.120.80 03 TX s01 0
p4 Poste 4 130.120.80 04 PCXP s02 1
p5 Poste 5 130.120.80 05 PCXP s02 0
p6 Poste 6 130.120.80 06 LINUX s03 2
p7 Poste 7 130.120.80 09 TX s03 0
p8 Poste 8 130.120.81 01 LINUX s11 2
p9 Poste 9 130.120.81 02 TX s11 0
p10 Poste 10 130.120.81 03 LINUX s12 0
p11 Poste 11 130.120.82 01 PCVI s21 2
p12 Poste 12 130.120.82 02 PCXP s21 1
la tables salle contient les colonne suivantes:
IDSALLE NOMSALLE NBPOSTE IDSEGMENT
s01 Salle 1 1 130.120.80
s02 Salle 2 4 130.120.80
s12 Salle 12 1 130.120.81
s21 Salle 21 2 130.120.82
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| CREATE OR REPLACE TRIGGER Trig_insert_Poste
BEFORE INSERT ON Poste
FOR EACH ROW
DECLARE
v_nbp Salle.nbPoste%TYPE;
v_idS Salle.idSegment%TYPE;
BEGIN
SELECT nbPoste, idSegment INTO v_nbp, v_idS
FROM Salle
WHERE idSalle = :NEW.idSalle;
IF v_idS != :NEW.idSegment AND v_nbp > 14 THEN
DBMS_OUTPUT.PUT_LINE ('la salle n apartien pa a idsegment ');
END IF;
END;
/
SHOW ERRORS;
L; |
le trigger a été déclenché sans erreurs mais quand j'ai essayé d'insérer cette ligne qui ne respecte pas les conditions "if" il l'insert!!!!!!!!
insert into poste
values('p200', 'poste200' , '130.120.81' , '16' , 'TX' , 's02' ,'0');