diff --git a/EXOS/exo1-FGL.sql b/EXOS/exo1-FGL.sql new file mode 100644 index 0000000..def70ab --- /dev/null +++ b/EXOS/exo1-FGL.sql @@ -0,0 +1,58 @@ +drop table tresultat purge; +create table tresultat(ligne varchar2(200)); + +variable vidEquipement char(3) +prompt id de l'équipement +accept vidEquipement + +variable vtarif number +prompt le tarif de l'équipement ? +accept vtarif + +variable vlibelle VARCHAR2(20) +prompt libellé équipement ? +accept vlibelle + +DECLARE + dmessage varchar2(200); + probleme exception; + dcpt number; + +BEGIN + + dmessage := 'ERREUR: id équipement déjà attribué'; + SELECT COUNT(*) INTO dcpt + FROM EQUIPEMENT + WHERE idEquipement = '&vidEquipement'; + IF dcpt=1 THEN + INSERT INTO tresultat VALUES (dmessage); + ELSE + dmessage := 'ERREUR: Le tarif doit être supérieure à 0'; + IF '&vtarif' <= 0 then + raise probleme; + ELSE + dmessage := 'ERREUR: le libellé de l''équipement doit être unique'; + SELECT count(*) INTO dcpt + FROM EQUIPEMENT + WHERE libelle = '&vlibelle'; + + IF dcpt>0 then + raise probleme; + ELSE + INSERT INTO EQUIPEMENT VALUES ('&vidEquipement', '&vtarif', '&vlibelle'); + COMMIT; + INSERT INTO tresultat VALUES ('L'équipement a été enregistré :' || '&vlibelle'); + END IF; + END IF; + +EXCEPTION + WHEN probleme then + INSERT INTO tresultat VALUES (dmessage); +END; +. +/ + +SELECT * FROM tresultat; + + + diff --git a/EXOS/exo2-FGL.sql b/EXOS/exo2-FGL.sql new file mode 100644 index 0000000..b9d356e --- /dev/null +++ b/EXOS/exo2-FGL.sql @@ -0,0 +1,50 @@ +DECLARE + + dmessage varchar2(200); + inexistant exception; + dcpt number; + dcptReserv number; + +BEGIN + + dmessage := 'l''identifiant de l''equipement est inconnu'; + SELECT COUNT(*) INTO dcpt + FROM equipement + WHERE idEquipement = '&videquip'; + + IF dcpt=0 THEN + RAISE inexistant; + ELSE + SELECT COUNT(*) INTO dcptReserv FROM CONTENIR con, RESERVATION res + WHERE con.idReserv = res.idReserv + AND dateReserv >= SYSDATE AND con.idEquipement = '&videquip'; + + dmessage := 'Des réservations en cours ou à venir utilisent cet équipement'; + + IF dcptReserv > 0 THEN + RAISE resaExiste; + ELSE + + SELECT COUNT(*) INTO dcptReserv FROM CONTENIR con, RESERVATION res + WHERE con.idReserv = res.idReserv AND dateReserv < SYSDATE + AND con.idEquipement = '&videquip'; + + DELETE FROM CONTENIR WHERE idReserv IN ( + SELECT con.idReserv INTO dcptReserv FROM CONTENIR con, RESERVATION res + WHERE con.idReserv = res.idReserv AND dateReserv < SYSDATE + AND con.idEquipement = '&videquip') AND idEquipement = '&videquip'; + INSERT INTO tresultat VALUES (TO_CHAR(dcptReserv) || ' contenu de réservations passées ont été supprimées'); + + DELETE FROM EQUIPEMENT WHERE idEquipement = '&videquip'; + INSERT INTO tresultat VALUES ('Equipement supprimé : ' || '&videquip'); + + END IF; + END IF; + +EXCEPTION + WHEN inexistant THEN + INSERT INTO tresultat VALUES (dmessage); + WHEN resaExiste THEN + INSERT INTO tresultat VALUES (dmessage); + +END; diff --git a/EXOS/exo3-FGL.sql b/EXOS/exo3-FGL.sql new file mode 100644 index 0000000..ed909f8 --- /dev/null +++ b/EXOS/exo3-FGL.sql @@ -0,0 +1,56 @@ + +DECLARE + + didReservation char(3); + ddateReserv date; + dnom varchar2(20); + dancidReservation char(3); + + dmessage varchar2(200); + inexistant exception; + dcpt number:=0; + dnb number:=0; + + CURSOR cur IS SELECT idReservation, dateReserv, nom + FROM CONTENIR con, RESERVATION res, FAIRE fai, JOUEUR jou + WHERE con.idReserv = res.idReserv AND res.idReserv = fai.idReserv AND fai.idJoueur = jou.idJoueur + AND dateReserv >= SYSDATE AND con.idEquipement = '&videquip' + ORDER BY 1,2,3; +BEGIN + dmessage:='id équipement inexistant'; + SELECT COUNT(*) INTO dcpt + FROM EQUIPEMENT + WHERE idEquipement='&videquip'; + + IF dcpt=0 THEN + RAISE inexistant; + ELSE + OPEN cur; + FETCH cur INTO didReservation, ddateReserv, dnom; + WHILE cur%FOUND + LOOP + INSERT INTO tresultat VALUES ('idReservation:' || didReservation || ' date:' || TO_CHAR(ddateReserv, 'dd/mm/yy')); + dancidReservation:=didReservation; + + WHILE dancidReservation=didReservation AND cur%FOUND + LOOP + INSERT INTO tresultat VALUES (dnom); + dnb := dnb+1; + + FETCH cur INTO didReservation, ddateReserv, dnom; + END LOOP; + END LOOP; + + CLOSE cur; + + INSERT INTO tresultat VALUES (''); + INSERT INTO tresultat VALUES ('Nombre de joueurs à prévenir : ' || TO_CHAR(dnb)); + END IF; + +EXCEPTION + WHEN inexistant THEN + INSERT INTO tresultat VALUES (dmessage); +END; + + + diff --git a/EXOS/exo4-FGL.sql b/EXOS/exo4-FGL.sql new file mode 100644 index 0000000..0a96390 --- /dev/null +++ b/EXOS/exo4-FGL.sql @@ -0,0 +1,29 @@ + +DECLARE + + didReserv char(5); + ddateReserv date; + dcout number; + + CURSOR cur IS SELECT idReserv, dateReserv, SUM(nombre*tarif) + FROM RESERVATION res, CONTENIR con, EQUIPEMENT equ + WHERE con.idReserv = res.idReserv AND con.idEquipement = equi.idEquipement + group by idReserv, dateReserv + order by 2 DESC; +BEGIN + + OPEN cur; + FETCH cur INTO didReserv, ddateReserv, dcout; + + WHILE cur%FOUND + LOOP + INSERT INTO tresultat VALUES ('Id reservation : ' || didReserv || ' date : ' || TO_CHAR(ddateReserv,'dd/mm/yy') || ' Coût des équipements : ' || TO_CHAR(dcout) || '€'); + INSERT INTO tresultat VALUES (''); + FETCH cur INTO didReserv, ddateReserv, dcout; + END LOOP; + + CLOSE cur; + +END; + +