Bonjour,

J'ai la contrainte d'integrité suivante:

La somme des factures pour une commande ne doit pas dépasser le prix de la commande.

Tables:
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
Commande (idcom, fraisport, prixtotalcom)
Facture (idfacture, datefacture, prixtotalfacture, idlivraisonf, idcomf)
 
avec
CREATE TABLE Commande (idcom number(10) NOT NULL, fraisport number(8,2), prixtotalcom number(10,2));
 
ALTER TABLE Commande ADD CONSTRAINT PK_commande PRIMARY KEY (idcom);
 
et
 
CREATE TABLE Facture (idfacture number(10) NOT NULL, datefacture date, prixtotalfacture number(10,2), idlivraisonf number(10), idcomf number(10));
 
ALTER TABLE Facture ADD CONSTRAINT PK_facture PRIMARY KEY (idfacture);
 
ALTER TABLE Facture ADD CONSTRAINT FK_facture_idlivraisonf FOREIGN KEY (idlivraisonf) REFERENCES Livraison (idlivraison);
 
ALTER TABLE Facture ADD CONSTRAINT FK_facture_idcomf FOREIGN KEY (idcomf) REFERENCES Commande (idcom);
Comme je débute je souhaiterais savoir si ceci est correct:
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
Create trigger tig1 
before insert on Facture
for each row
declare
SomFac number(8,2));
SomInv exception;
 
begin
select prixtotalcom into SomFac
from Commande
where idcom=:new.idcomf;
 
if SELECT SUM(prixtotalfacture) from Facture WHERE idcomf=idcom
then raise SomInv;
endif;
 
Exception
When SomInv then raise_application_error (-20300,'La somme des factures
        est supérieur à la commande');
When no_data_found then raise_application_error (-20322,'Identifiant de commande inconnue');
end;