|   Contraintes sont conçus pour prévenir les accidents dans le traitement des données et de préserver l'intégrité des données . Dans certains cas, cependant , il peut être nécessaire de reporter les contraintes de sorte qu'ils n'ont pas fait valoir leurs règles jusqu'à ce qu'une condition spécifique soit remplie . Par exemple , il est possible de reporter les règles d'une contrainte pour activer seulement quand un " commit" a été demandée. Instructions 1
  créer deux tables dans SQLPlus de démontrer contraintes reportables comme suit : 
  CREATE TABLE test (produits   test_id INTEGER PRIMARY KEY , AB   foreign_id INTEGER NOT NULL) ; 
  CREATE TABLE test2 (produits   test2_id INTEGER PRIMARY KEY , AB   foreign2_id INTEGER NOT NULL 
  ) ; < br > 2
  modifier les tables dans SQLPlus ajouter des contraintes de clés étrangères les unes aux autres comme suit : 
  ALTER TABLE test ADD CONSTRAINT test2REF 
  FOREIGN KEY ( foreign_ID ) RÉFÉRENCES test2 ( test2_ID ) 
  initialement reportées DEFERRABLE ; 
  ALTER TABLE test2 Ajouter une contrainte testREF 
  FOREIGN KEY ( foreign2_ID ) REFERENCES essai ( test_ID ) 
  initialement reportées DEFERRABLE ; 
 3
  insérer des enregistrements dans les tables de SQLPlus . Cela montre qu'avec une contrainte reportables , les lignes peuvent être ajoutées en dépit des contraintes de clés étrangères : 
  insérer dans les valeurs de test (1, 2); 
  INSERT INTO test2 VALUES ( 2 , 1); 4
  commettre les informations à la commande SQLPlus avec : 
  commettre; 
  Cela viendra compléter l'opération et les lignes seront ajoutées aux deux tables < br . > 5
  démontrer comment il échouerait en exécutant toutes les commandes à nouveau en une seule opération , mais sans la contrainte différé . Au commandement SQLPlus entrer : 
  - Première baisse des tables 
  DROP TABLE des contraintes CASCADE d'essai; 
  DROP TABLE test2 des contraintes CASCADE ; 
  - . - maintenant, entrez toutes les commandes précédentes, mais sans les contraintes reportables comme suit: 
  CREATE TABLE test (produits   test_id INTEGER PRIMARY KEY , AB   foreign_id INTEGER NOT NULL < p> ) ;
 
  CREATE TABLE test2 (produits   test2_id INTEGER PRIMARY KEY , AB   foreign2_id INTEGER NOT NULL 
  ) ; 
  ALTER TABLE test Ajouter une contrainte test2REF 
  FOREIGN KEY ( foreign_id ) RÉFÉRENCES test2 ( test2_id ) ; 
  ALTER TABLE test2 Ajouter une contrainte testREF 
  FOREIGN KEY ( foreign2_id ) de test Références ( test_id ) ; 
  insérer dans les valeurs de test (1, 2); 
  INSERT INTO test2 VALUES ( 2, 1 ); 
  Cette version du script échouera comme les contraintes ont pas été reporté en attente d'une commande " commit" . 
 
 |