Bonjour,
Voici quelques illustrations de contraintes d'intégrité fonctionnelles/référencielles en SQL/DB2 :
--CREATION DE LA TABLE POSTES AVEC CONTRAINTES ET INTEGRITES REFERENTIELLES
-- CREATION SUR TABLES PARENTES COMMANDE ET ARTICLES :
-- - Toute tentative de création d'une ligne de commande dans la table POSTES
-- sera rejetée si aucune correspondance entre les deux n° de commande
-- (NOCDE) des deux tables POSTES et COMMANDE, n'est vérifiée.
-- Si ce cas survient SQLCODE = -530 et SQLSTATE=23503
-- - Idem pour les REFERENCES des lignes de la table POSTES relativement à
-- la table ARTICLES.
-- ANNULATION SUR TABLES PARENTES COMMANDE ET ARTICLES :
-- - Toute ANNULATION, dans la table COMMANDE, d'une COMMANDE entraîne l'annula-
-- tion de la (ou des) ligne(s) de même numéro (NOCDE) présente(s) dans
-- la table POSTES.
-- - En ce qui concerne les référence des lignes de la table POSTES, Toute
-- tentative d'ANNULATION dans la table ARTICLES, d'une REFERENCE existante
-- sur une ligne au moins de la table POSTES génère une anomalie du type :
-- SQLCODE = -532 et SQLSTATE=23504.
CREATE TABLE POSTES (
POSTE DECIMAL (5) NOT NULL ,
REFERENCE CHAR (9) NOT NULL ,
QTE DECIMAL (6) ,
PRIXUNIT DECIMAL (9,2) ,
NUL CHAR (5) ,
NOCDE CHAR (8) NOT NULL ,
PRIMARY KEY (NOCDE, POSTE) ,
-- Intégrités référencielles :
CONSTRAINT REF_POSTART FOREIGN KEY (REFERENCE)
REFERENCES ARTICLES (REFERENCE) ON DELETE NO ACTION,
CONSTRAINT REF_POSTCOM FOREIGN KEY (NOCDE)
REFERENCES COMMANDE (NOCDE) ON DELETE CASCADE );
=======================================================================
-- INSERTION D'UNE LIGNE POSTES DONT LA REF. EST INCONNUE DANS ARTICLES --
---- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ----
-- Tentative d'insertion d'une ligne dans la table POSTES dont la référence est
-- inconnue dans la table ARTICLES/TARIFS
-- CONSTRAINT REF_POSTART FOREIGN KEY (REFERENCE)
-- REFERENCES ARTICLES (REFERENCE) ON DELETE NO ACTION,
INSERT INTO POSTES
VALUES (10, 'ARTINCONN', 2, 100.00, '', '00000001') ;
-- RESULTAT OBTENU : A P R E S T E N T A T I V E (plantage du job) ----------
-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
-- $ SQL0530N La valeur d'insertion ou de mise à jour de la FOREIGN KEY (clé $
-- $ associée) "CHRISTIAN.POSTES.REF_POSTCOM" n'est égale à aucune valeur $
-- $ de la clé parente de la table parente. SQLSTATE=23503 $
-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
======================================================================
-- TENTATIVE DE SUPPRESSION DE TOUTES LES LIGNES DE LA TABLE ARTICLES --
---- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ----
-- Tentative d'annulation physique de toutes les lignes de la table ARTICLES
-- en utilisant le synonyme TARIFS.
-- CONSTRAINT REF_POSTART FOREIGN KEY (REFERENCE)
-- REFERENCES ARTICLES (REFERENCE) ON DELETE NO ACTION,
DELETE FROM TARIFS ;
-- RESULTAT OBTENU : A P R E S T E N T A T I V E (plantage du job) ----------
-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
-- $ SQL0532N Une ligne parente ne peut pas être supprimée car la relation $
-- $ "CHRISTIAN.POSTES.REF_POSTART" limite la suppression. SQLSTATE=23504. $
-- $SQLCA Information $
-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
30 janv. 2015 à 10:57