1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
CREATE TABLE NOTIFICATIONS
(
ID_NOTIFICATION integer NOT NULL primary key, /* champs autoinc */
NTF_ID integer, /* le ID en question*/
IP_POSTE VARCHAR(20), // adresse IP
TYPE_ACTION SMALLINT
);
// trigger classique produit par flamerobin
SET TERM ^ ;
CREATE TRIGGER NOTIFICATION FOR NOTIFICATIONS ACTIVE
BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE tmp DECIMAL(18,0);
BEGIN
IF (NEW.ID_NOTIFICATION IS NULL) THEN
NEW.ID_NOTIFICATION = GEN_ID(GEN_NOTIFICATION_ID, 1);
ELSE
BEGIN
tmp = GEN_ID(GEN_NOTIFICATION_ID, 0);
if (tmp < new.ID_NOTIFICATION) then
tmp = GEN_ID(GEN_NOTIFICATION, new.ID_NOTIFICATION-tmp);
END
NEW.IP_POSTE=RDB$GET_CONTEXT('SYSTEM','CLIENT_ADDRESS'); // à vérifier
POST_EVENT 'NOTIFICATION';
END^
SET TERM ; ^
// Trigger sur une table LAMBDA,
// une séquence pour l'identification de la table serait géré dans un trigger en position 0
CREATE TRIGGER NOTIFICATION FOR NOTIFICATIONS ACTIVE
BEFORE INSERT OR UPDATE OR DELETE POSITION 2
AS
DECLARE VARIABLE T SMALLINT;
DECLARE VARIABLE LAMBDAID NUMERIC(18,0);
BEGIN
IF (INSERTING) THEN
BEGIN
LAMBDAID=NEW.ID_LAMBDA;
T=1;
END
IF (UPDATING) THEN
BEGIN
LAMBDAID=NEW.ID_LAMBDA;
T=2;
END
IF (DELETING) THEN
BEGIN
LAMBDAID=OD.ID_LAMBDA;
T=0;
END
INSERT INTO NOTIFICATIONS( NTF_ID,TYPE_ACTION) VALUES (:LAMBDAID,:T);
END |
Partager