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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.