Database Reference
In-Depth Information
Règles métier ( suite )
Contraintes SQL ( suite )
Un.client.peut.détenir.au.maximum.
3 adresses.e-mails.
ALTER TABLE mails
ADD num_mail NUMBER(1,0);
ALTER TABLE mails
ADD CONSTRAINT ck_3_mails_client
CHECK (num_mail IN (1,2,3));
ALTER TABLE mails
ADD CONSTRAINT un_3_mails_client
UNIQUE (id_cli,num_mail);
Seuls.les.clients.arrivés.depuis.plus.
de.4 ans.peuvent.détenir.jusqu'à.
5 adresses.e-mails.
ALTER TABLE mails
DROP CONSTRAINT ck_3_mails_client;
CREATE TRIGGER tri_3_ou_5_mails_client
BEFORE INSERT OR UPDATE OF id_cli
ON mails FOR EACH ROW
DECLARE
numero INTEGER;
v_date_arrivee DATE;
BEGIN
SELECT date_arrivee INTO v_date_arrivee
FROM clients WHERE id_cli = :NEW.id_cli;
-- client depuis moins de 4 ans
IF (ADD_MONTHS(v_date_arrivee,48)>SYSDATE) THEN
IF (:NEW.num_mail > 3) THEN
RAISE_APPLICATION_ERROR
(-20001,'Le client est limité à 3 mails...');
END IF;
ELSE
-- client depuis plus de 4 ans
IF (:NEW.num_mail > 5) THEN
RAISE_APPLICATION_ERROR
(-20002,'Le client est limité à 5 mails...');
END IF;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- la clé étrangère va faire son boulot
NULL;
END;
 
Search WWH ::




Custom Search