CLEAR SCREEN; alter session set nls_date_format = 'dd/mm/yyyy'; SET ECHO ON; SPOOL TEST.out; ----------------------------- -- DEBUT DES TESTS ---------- ----------------------------- ----------------------------- --- TESTS BIBLIOTHEQUES ----- ----------------------------- ---- PK_BIBLIOTHEQUES_01 PRIMARY KEY INSERT INTO Bibliotheques VALUES(NULL,'éducation'); INSERT INTO Bibliotheques VALUES(999,'juridique'); INSERT INTO Bibliotheques VALUES(999,'arts'); ROLLBACK; ---- CK_BIBLIOTHEQUES_02 INSERT INTO Bibliotheques VALUES(333,'maisonneu'); INSERT INTO Bibliotheques VALUES(222,'SCIENCES!'); ROLLBACK; ---- UN_BIBLIOTHEQUES_03 INSERT INTO Bibliotheques VALUES(111,'éducation'); INSERT INTO Bibliotheques VALUES(123,'éducation'); ROLLBACK; ---- NN_BIBLIOTHEQUES_04 INSERT INTO Bibliotheques VALUES(444,NULL); INSERT INTO Bibliotheques VALUES(555,NULL); ROLLBACK; ----------------------------- --- TESTS AUTEURS ----------- ----------------------------- ---- PK_AUTEURS_01 INSERT INTO Auteurs VALUES(NULL,'UnNom','UnPrenom'); INSERT INTO Auteurs VALUES(12345, 'unAutre','lalala'); INSERT INTO Auteurs VALUES(12345, 'bar','foo'); ROLLBACK; ---- NN_AUTEURS_02 INSERT INTO Auteurs VALUES(31245,NULL,'foobar'); ROLLBACK; ---- NN_AUTEURS_03 INSERT INTO Auteurs VALUES(54312,'foobar',NULL); ROLLBACK; ---- UN_AUTEURS_04 INSERT INTO Auteurs VALUES(55555,'foo','bar'); INSERT INTO Auteurs VALUES(99999,'foo','bar'); ROLLBACK; ----------------------------- --- TESTS OEUVRES ----------- ----------------------------- ---- PK_OEUVRES_01 PRIMARY KEY INSERT INTO Oeuvres VALUES(NULL,'UN PREMIER TITRE',1); INSERT INTO Oeuvres VALUES(999999,'UN TITRE',1); INSERT INTO Oeuvres VALUES(999999,'UN AUTRE TITRE',1); ROLLBACK; ---- NN_OEUVRES_02 NOT NULL INSERT INTO Oeuvres VALUES(999999,NULL,1); ROLLBACK; ---- FK_OEUVRES_03 REFERENCES Auteurs INSERT INTO Oeuvres VALUES(999999,'UN TITRE INCONNU!',98765); ROLLBACK; ---- NN_OEUVRES_04 NOT NULL INSERT INTO Oeuvres VALUES(999999,'UN TITRE',NULL); ROLLBACK; ---- UN_OEUVRES_05 UNIQUE(titreOeuvre, noAuteur) INSERT INTO Oeuvres VALUES(999999, 'un titre générique',1); INSERT INTO Oeuvres VALUES(888888, 'un titre générique',1); ROLLBACK; ----------------------------- --- TESTS EXEMPLAIRES ------- ----------------------------- ---- FK_EXEMPLAIRES_01 REFERENCES Bibliotheques INSERT INTO Exemplaires VALUES(333,567,1); ROLLBACK; ---- FK_EXEMPLAIRES_02 REFERENCES OEUVRES INSERT INTO Exemplaires VALUES(221,1,999999); ROLLBACK; ---- PK_EXEMPLAIRES_03 PRIMARY KEY(noBiblio, noExemplaire, noOeuvre) INSERT INTO Exemplaires VALUES(555,1,1); INSERT INTO Exemplaires VALUES(555,1,1); INSERT INTO Exemplaires VALUES(NULL,1,1); INSERT INTO Exemplaires VALUES(666,NULL,1); INSERT INTO Exemplaires VALUES(666,1,NULL); ROLLBACK; ----------- TESTS ----------- --- CATEGORIEUTILISATEURS --- ----------------------------- -- PK_CATEGORIEUTILISATEURS_01 PRIMARY KEY INSERT INTO CategorieUtilisateurs VALUES(999,'professeur',1,1,1); INSERT INTO CategorieUtilisateurs VALUES(999,'professeur',2,2,2); INSERT INTO CategorieUtilisateurs VALUES(NULL,'étudiant',1,1,1); ROLLBACK; -- UN_CATEGORIEUTILISATEURS_02 UNIQUE INSERT INTO CategorieUtilisateurs VALUES(999,'étudiant',1,1,1); ROLLBACK; -- NN_CATEGORIEUTILISATEURS_03 NOT NULL INSERT INTO CategorieUtilisateurs VALUES(999,NULL,1,1,1); ROLLBACK; -- CH_CATEGORIEUTILISATEURS_04 CHECK(nomCategorie IN ('étudiant','chercheur','professeur')) INSERT INTO CategorieUtilisateurs VALUES(999,'HAHAHA',1,1,1); INSERT INTO CategorieUtilisateurs VALUES(998,'FOOBAR',1,1,1); ROLLBACK; -- NN_CATEGORIEUTILISATEURS_05 NOT NULL INSERT INTO CategorieUtilisateurs VALUES(999,'professeur',NULL,1,1); ROLLBACK; -- CK_CATEGORIEUTILISATEURS_06 CHECK(dureePret>=0) INSERT INTO CategorieUtilisateurs VALUES(999,'professeur',-3,1,1); ROLLBACK; -- CK_CATEGORIEUTILISATEURS_07 CHECK(penaliteParJour >= 0) INSERT INTO CategorieUtilisateurs VALUES(999,'professeur',1,-3,1); ROLLBACK; -- NN_CATEGORIEUTILISATEURS_08 NOT NULL INSERT INTO CategorieUtilisateurs VALUES(999,'professeur',1,NULL,1); ROLLBACK; -- CK_CATEGORIEUTILISATEURS_09 CHECK(nbMaxExemplaires > 0) INSERT INTO CategorieUtilisateurs VALUES(999,'professeur',1,1,0); INSERT INTO CategorieUtilisateurs VALUES(998,'professeur',1,1,-4); ROLLBACK; -- NN_CATEGORIEUTILISATEURS_10 NOT NULL INSERT INTO CategorieUtilisateurs VALUES(999,'professeur',1,1,NULL); ROLLBACK; ----------------------------- --- TESTS UTILISATEURS ------ ----------------------------- -- PK_UTILISATEURS_01 PRIMARY KEY INSERT INTO Utilisateurs VALUES(NULL,'foooooooo',0,1); INSERT INTO Utilisateurs VALUES(9999999,'LALALA',0,1); INSERT INTO Utilisateurs VALUES(9999999,'BAAAAR',0,1); ROLLBACK; -- NN_UTILISATEURS_02 NOT NULL INSERT INTO Utilisateurs VALUES(999999,NULL,0,1); ROLLBACK; -- CK_UTILISATEURS_03 CHECK(penaliteesImpayees >= 0) INSERT INTO Utilisateurs VALUES(999999,'Robert',-5,1); ROLLBACK; -- NN_UTILISATEURS_04 NOT NULL INSERT INTO Utilisateurs VALUES(999999,'Robert',NULL,1); ROLLBACK; -- FK_UTILISATEURS_05 REFERENCES CategorieUtilisateurs INSERT INTO Utilisateurs VALUES(999999,'Robert',0,999); ROLLBACK; -- CONSTRAINT NN_UTILISATEURS_06_34 NOT NULL INSERT INTO Utilisateurs VALUES(999999,'Robert',0,NULL); ROLLBACK; ----------------------------- --- TESTS PRETS ------------- ----------------------------- -- PK_PRETS_01 PRIMARY KEY INSERT INTO Prets VALUES(NULL,SYSDATE,NULL,10001,1,1); INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,1,1); INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,1,1); ROLLBACK; -- NN_PRETS_02 NOT NULL INSERT INTO Prets VALUES(9999999999,NULL,NULL,10001,1,1,1); ROLLBACK; -- FK_PRETS_03 REFERENCES Utilisateurs INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,0,1,1,1); ROLLBACK; -- NN_PRETS_04 NOT NULL INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,NULL,1,1,1); ROLLBACK; -- NN_PRETS_05 NOT NULL INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,NULL,1,1); ROLLBACK; -- NN_PRETS_06 NOT NULL INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,1,NULL,1); ROLLBACK; -- NN_PRETS_07 NOT NULL INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,1,1,NULL); ROLLBACK; -- FK_PRETS_04 FOREIGN KEY(noExemplaire,noBiblio,noOeuvre) INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,999,1,1); INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,1,999,1); INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,1,1,999); INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,999,999,1); INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,1,999,999); INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,999,1,999); INSERT INTO Prets VALUES(9999999999,SYSDATE,NULL,10001,999,999,999); ROLLBACK; ----------------------------- --- TESTS TRIGGERS ------------- ----------------------------- -- BD_Utilisateurs_00 [Penalitées impayées] UPDATE Utilisateurs SET penaliteesImpayees = 999 WHERE noUtilisateur = 10001; DELETE FROM Utilisateurs WHERE noUtilisateur = 10001; ROLLBACK; -- AD_Utilisateurs_01 [Aucune penalitée, DELETE tous les prêts qu'il a] UPDATE Utilisateurs SET penaliteesImpayees = 0 WHERE noUtilisateur = 10001; --UPDATE Prets --SET dateRetour = SYSDATE --WHERE noUtilisateur = 10001; -- Uncomment si l'exception est levée SELECT Count(*) -- Nombre de prets avant la suppresion [Ne fonctionne peut-être pas.. va surement lever BD_Prets_01] FROM Prets WHERE noUtilisateur = 10001; DELETE FROM Utilisateurs WHERE noUtilisateurs = 10001; SELECT Count(*) -- Nombre de prets après la suppresion FROM Prets WHERE noUtilisateur = 10001; ROLLBACK; -- BU_Prets_00 [Prévention du changement du numéro de pret] UPDATE Prets SET noPret = 98765 WHERE noPret = 1; SELECT * From Prets WHERE noPret = 98765; --Si un prêt est remis, on ne peut le changer. Archivage. UPDATE Prets SET dateRetour = SYSDATE WHERE noPret = 1; UPDATE Prets SET noUtilisateur = 20001 WHERE noPret = 1; ROLLBACK; --Un prêt doit être remis a une date postérieure ou égale a celle de celle du pret UPDATE Prets SET dateRetour = NULL WHERE noPret = 1; UPDATE Prets SEt dateRetour = '01/01/1986' WHERE noPret = 1; -- BD_PRETS_01 [Prévention de la suppresion de prêts non-remis] DELETE FROM Prets WHERE noPret = 1; ROLLBACK; -- BI_PRETS_02 [Prévention de prêt d'exemplaire déja preté] INSERT INTO Prets VALUES(1,SYSDATE,NULL,20001,1,1,2034); --Essaie de louer plus d'exemplaire que sa categorie le lui permet. INSERT INTO Prets VALUES(10000,SYSDATE,NULL,10001,3,1,2034); -- AU_Prets_03 SELECT penaliteesImpayees -- Devrait être NULL ou 0 FROM Utilisateurs WHERE noUtilisateur = 10001; UPDATE Prets SET dateRetour = SYSDATE + 25 WHERE noPret = 1; SELECT penaliteesImpayees -- Devrait être > 0 FROM Utilisateurs WHERE noUtilisateur = 10001; SPOOL OFF;