From 0777f85e7484496cee24abd067ddcb06da939d8c Mon Sep 17 00:00:00 2001 From: Pascal Lafourcade Date: Sat, 15 Feb 2020 13:00:27 +0100 Subject: [PATCH] reponse --- EXOS/2020nba-q1.sql | 46 ++++++++++++++++++++++ EXOS/2020nba-q2.sql | 0 EXOS/2020nba-q3.sql | 48 +++++++++++++++++++++++ EXOS/2020nba-q4.sql | 41 ++++++++++++++++++++ EXOS/2020nba-setup.sql | 88 ++++++++++++++++++++++++++++++++++++++++++ EXOS/2020q1.sql | 38 ++++++++++++++++++ EXOS/2020q2.sql | 41 ++++++++++++++++++++ EXOS/Partiel2020.tex | 70 +++++++++++++++------------------ 8 files changed, 333 insertions(+), 39 deletions(-) create mode 100644 EXOS/2020nba-q1.sql create mode 100644 EXOS/2020nba-q2.sql create mode 100644 EXOS/2020nba-q3.sql create mode 100644 EXOS/2020nba-q4.sql create mode 100644 EXOS/2020nba-setup.sql create mode 100644 EXOS/2020q1.sql create mode 100644 EXOS/2020q2.sql diff --git a/EXOS/2020nba-q1.sql b/EXOS/2020nba-q1.sql new file mode 100644 index 0000000..f19666d --- /dev/null +++ b/EXOS/2020nba-q1.sql @@ -0,0 +1,46 @@ +@2020nba-setup.sql; + +DROP TABLE TLIGNE; +CREATE TABLE TLIGNE(LIGNE VARCHAR2(200)); + +variable vidgame varchar2(10) +prompt Entrer un game +accept vidgame + +DECLARE +dnom varchar2(200); +dprenom varchar2(200); +dposte char(2); +didjoueur varchar2(20); +dnbfautes number; +dfautes number; + +CURSOR Cnom IS SELECT j.id_joueur, j.Nom, j.Prenom, j.Poste +FROM JOUEUR j, JOUE e +WHERE j.id_joueur = e.id_joueur AND e.id_game = '&vidgame'; + +CURSOR Cfaute IS SELECT FAUTES, COUNT(ID_game) FROM JOUE WHERE id_joueur = didjoueur GROUP BY FAUTES ORDER BY FAUTES; + + +BEGIN +INSERT INTO tligne VALUES ('Nom Prenom Poste'); + +OPEN Cnom; +FETCH Cnom INTO didjoueur, dnom, dprenom, dposte; +WHILE Cnom%found LOOP + INSERT INTO tligne VALUES (dnom||' '||dprenom||' '||dposte); + OPEN Cfaute; + INSERT INTO tligne VALUES ('Faute Nb Matchs'); + FETCH Cfaute INTO dfautes, dnbfautes; + WHILE Cfaute%found LOOP + INSERT INTO tligne VALUES (TO_CHAR(dfautes)||' '||TO_CHAR(dnbfautes)); + FETCH Cfaute INTO dfautes, dnbfautes; + END LOOP; + CLOSE Cfaute; + FETCH Cnom INTO didjoueur, dnom, dprenom, dposte; +END LOOP; +CLOSE Cnom; +END; +. +/ +SELECT * FROM tligne ; diff --git a/EXOS/2020nba-q2.sql b/EXOS/2020nba-q2.sql new file mode 100644 index 0000000..e69de29 diff --git a/EXOS/2020nba-q3.sql b/EXOS/2020nba-q3.sql new file mode 100644 index 0000000..e6b1e9a --- /dev/null +++ b/EXOS/2020nba-q3.sql @@ -0,0 +1,48 @@ +@nba-setup.sql; + +DROP TABLE tligne ; +CREATE TABLE tligne (ligne varchar2(100)) ; + +set echo off; +set verify off; +set feedback off; + +variable vidjoueur char(4) +prompt Entrer la reference du joueur : +accept vidjoueur + +DECLARE +dmaxpoint number; +dnbjoueur number; +didjoueur char(4); + +BEGIN + +SELECT count(Nom) INTO dnbjoueur FROM JOUEUR +WHERE id_joueur ='&vidjoueur'; + +if dnbjoueur != 0 then + +SELECT max(points) INTO dmaxpoint FROM JOUE +WHERE id_joueur ='&vidjoueur'; + +INSERT INTO tligne VALUES ('Le maximum de point du joueur '||'&vidjoueur'||' est '||to_char(dmaxpoint)); +ELSE +INSERT INTO tligne VALUES('AVEC COUNT : Joueur inconnu'); +end if; + +SELECT id_joueur INTO didjoueur FROM JOUE +WHERE id_joueur ='&vidjoueur'; + + +EXCEPTION +when no_data_found then +INSERT INTO tligne VALUES('AVEC EXCEPTION : Joueur n a pas fait de match'); +end ; +. +/ + +SELECT * FROM tligne ; +set verify on; +set feedback on; +set echo on; diff --git a/EXOS/2020nba-q4.sql b/EXOS/2020nba-q4.sql new file mode 100644 index 0000000..f4b44a2 --- /dev/null +++ b/EXOS/2020nba-q4.sql @@ -0,0 +1,41 @@ +@nba-setup.sql; + +DROP TABLE tligne ; +CREATE TABLE tligne (ligne varchar2(100)) ; + +set echo off; +set verify off; +set feedback off; + +DECLARE +dnom varchar2(20); +dprenom varchar2(20); +ddate date; +dnomequipe varchar2(20); + +CURSOR c IS SELECT j.Nom, j.Prenom, j.Date_de_naissance, e.Nom FROM JOUEUR j, APPARTIENT a, EQUIPE e +WHERE a.id_joueur = j.id_joueur and e.id_equipe = a.id_equipe and a.Date_fin is NULL +Order by Date_de_naissance; + + +BEGIN +OPEN c; + +INSERT INTO tligne VALUES ('Nom Prenom Date de naissance Nom Equipe Actuelle'); +FETCH c INTO dnom, dprenom, ddate, dnomequipe; + +WHILE c%found +LOOP + INSERT INTO tligne VALUES (dnom||' '||dprenom||' '||to_char(ddate)||' '||dnomequipe); + FETCH c INTO dnom, dprenom, ddate, dnomequipe; +END LOOP; + +CLOSE C; +END; +. +/ + +SELECT * FROM tligne ; +set verify on; +set feedback on; +set echo on; diff --git a/EXOS/2020nba-setup.sql b/EXOS/2020nba-setup.sql new file mode 100644 index 0000000..dd85eed --- /dev/null +++ b/EXOS/2020nba-setup.sql @@ -0,0 +1,88 @@ +DROP TABLE JOUE; +DROP TABLE GAME; +DROP TABLE APPARTIENT cascade constraints; +DROP TABLE JOUEUR cascade constraints; +DROP TABLE EQUIPE cascade constraints; + +CREATE TABLE JOUEUR(id_joueur CHAR(6) PRIMARY KEY, +Nom VARCHAR2(20), +Prenom VARCHAR2(20), +Date_de_naissance DATE, +Taille NUMBER, +Poste char(2) constraint c_poste CHECK (Poste IN('PG','SG','SF','PF','C'))); + +CREATE TABLE EQUIPE(id_equipe CHAR(6) PRIMARY KEY, +Nom VARCHAR2(20), +Ville VARCHAR2(20), +Conference VARCHAR2(5) constraint c_conf check (Conference in('Est','Ouest')), +Date_creation DATE); + +CREATE TABLE GAME(id_game CHAR(6) PRIMARY KEY, +Date_game DATE, +id_equipe_domicile CHAR(6) references EQUIPE, +id_equipe_exterieur CHAR(6) references EQUIPE, +Ville VARCHAR2(20), +Categorie char(7) constraint c_type check (Categorie in('Amical','Saison','Playoff','Allstar')), +Score_domicile NUMBER, +Score_exterieur NUMBER, +Prolongation NUMBER); + +CREATE TABLE JOUE(id_joueur CHAR(6) references JOUEUR, +id_game CHAR(6) references GAME, +Points NUMBER, +Rebonds NUMBER, +Interceptions NUMBER, +Contres NUMBER, +Passes NUMBER, +Balles_perdues NUMBER, +Fautes NUMBER, +PRIMARY KEY(id_joueur,id_game)); + + +CREATE TABLE APPARTIENT(id_contrat CHAR(6) PRIMARY KEY, +id_joueur CHAR(6) references JOUEUR, +id_equipe CHAR(6) references EQUIPE, +Date_debut DATE, +Date_fin DATE, +Salaire_jour NUMBER); + +insert into JOUEUR values ('J00001','Jordan','Michael','01-Jan-1980','193','SF'); +insert into JOUEUR values ('J00002','Bird','Larry','02-Jan-1980','194','SF'); +insert into JOUEUR values ('J00003','Johnson','Magic','03-Jan-1980','201','PG'); +insert into JOUEUR values ('J00004','Thomas','Isiah','04-Jan-1980','185','PG'); +insert into JOUEUR values ('J00005','Oneil','Shaquille','04-Jan-1992','185','C'); +insert into JOUEUR values ('J00006','Parker','Tony','04-Jan-1996','185','PG'); + + +insert into EQUIPE values ('E00001','Bulls','Chicago','Est','04-Jan-1970'); +insert into EQUIPE values ('E00002','Lakers','LA','Ouest','06-Jan-1970'); +insert into EQUIPE values ('E00003','Pistons','Detroit','Est','07-Jan-1970'); +insert into EQUIPE values ('E00004','Celtics','Boston','Est','09-Jan-1970'); +insert into EQUIPE values ('E00005','Spurs','San Antonio','Ouest','06-Jan-1971'); + +insert into APPARTIENT values ('C00001','J00001','E00001','04-Jan-1980',NULL,10000); +insert into APPARTIENT values ('C00002','J00002','E00004','04-Jan-1981',NULL,1000); +insert into APPARTIENT values ('C00003','J00003','E00002','04-Jan-1981','04-Jan-2010',3000); +insert into APPARTIENT values ('C00004','J00004','E00003','04-Jan-1982',NULL,5000); +insert into APPARTIENT values ('C00005','J00005','E00002','04-Jan-1990',NULL,5000); +insert into APPARTIENT values ('C00006','J00006','E00005','04-Jan-1990',NULL,5000); + +insert into GAME values ('G00001','04-Jan-2001','E00002','E00001','Londres','Saison',100,101,0); +insert into GAME values ('G00002','04-Jan-2001','E00003','E00004','Boston','Saison',102,101,0); +insert into GAME values ('G00003','04-May-2001','E00004','E00003','Detroit','Playoff',107,101,0); +insert into GAME values ('G00004','04-Apr-2001','E00001','E00002','Miami','Allstar',105,101,0); +insert into GAME values ('G00005','04-Apr-2001','E00001','E00003','Miami','Allstar',105,101,0); +insert into GAME values ('G00006','04-Apr-2001','E00001','E00004','Miami','Allstar',105,101,0); + +insert into JOUE values ('J00006','G00004',17,18,1,0,1,3,4); +insert into JOUE values ('J00005','G00004',17,18,1,0,1,3,3); +insert into JOUE values ('J00002','G00004',17,18,1,0,1,3,1); +insert into JOUE values ('J00003','G00004',17,18,1,0,1,3,2); +insert into JOUE values ('J00001','G00006',17,18,1,0,1,3,4); +insert into JOUE values ('J00003','G00006',17,18,1,0,1,3,2); +insert into JOUE values ('J00003','G00005',17,18,1,0,1,3,4); +insert into JOUE values ('J00004','G00004',17,18,1,0,1,3,4); +insert into JOUE values ('J00001','G00003',20,10,4,1,2,2,3); +insert into JOUE values ('J00001','G00002',19,11,3,2,2,1,2); +insert into JOUE values ('J00001','G00001',18,12,2,3,1,0,1); + diff --git a/EXOS/2020q1.sql b/EXOS/2020q1.sql new file mode 100644 index 0000000..670acb3 --- /dev/null +++ b/EXOS/2020q1.sql @@ -0,0 +1,38 @@ +DROP TABLE ETUDIANT2020; +CREATE TABLE ETUDIANT2020(nom varchar2(100), age number); + +INSERT INTO ETUDIANT2020 VALUES('Alice', 12); +INSERT INTO ETUDIANT2020 VALUES('Bob', 15); +INSERT INTO ETUDIANT2020 VALUES('Charlie', 18); +INSERT INTO ETUDIANT2020 VALUES('Dave', 21); +INSERT INTO ETUDIANT2020 VALUES('Eve', 11); + +DROP TABLE tligne; +CREATE TABLE tligne(DESCRIPTION VARCHAR2(300)); + +SET echo off; +SET verify off; +SET feedback off; + +DECLARE +dnom VARCHAR2(100); + +CURSOR C IS SELECT nom from ETUDIANT2020 WHERE (age >= 18); + +BEGIN +OPEN C; +FETCH C into dnom; +WHILE C%FOUND + LOOP + INSERT INTO tligne VALUES(dnom); + FETCH C into dnom; +END LOOP; +CLOSE C; +END; +. +/ +SET echo on; +SET verify on; +SET feedback on; + +SELECT * FROM TLIGNE; diff --git a/EXOS/2020q2.sql b/EXOS/2020q2.sql new file mode 100644 index 0000000..1b026dd --- /dev/null +++ b/EXOS/2020q2.sql @@ -0,0 +1,41 @@ +DROP TABLE ETUDIANT2020; +CREATE TABLE ETUDIANT2020(nom varchar2(100), age number); +INSERT INTO ETUDIANT2020 VALUES('Alice', 12); +INSERT INTO ETUDIANT2020 VALUES('Bob', 15); +INSERT INTO ETUDIANT2020 VALUES('Charlie', 18); +INSERT INTO ETUDIANT2020 VALUES('Dave', 21); +INSERT INTO ETUDIANT2020 VALUES('Eve', 11); + +DROP TABLE tligne; +CREATE TABLE tligne(DESCRIPTION VARCHAR2(300)); + + +SET echo off; +SET verify off; +SET feedback off; + +DECLARE +Dnbmineur number; +MINEUR EXCEPTION; + +BEGIN +SELECT count(*) into Dnbmineur +FROM ETUDIANT2020 +WHERE AGE < 18; + +IF (Dnbmineur > 0) THEN RAISE MINEUR; +END IF; + +EXCEPTION +WHEN MINEUR THEN +INSERT INTO tligne VALUES(Dnbmineur); + +END; +. +/ + +SET echo on; +SET verify on; +SET feedback on; + +SELECT * FROM TLIGNE; diff --git a/EXOS/Partiel2020.tex b/EXOS/Partiel2020.tex index be80052..e7a8d35 100644 --- a/EXOS/Partiel2020.tex +++ b/EXOS/Partiel2020.tex @@ -284,10 +284,10 @@ Poste('PG','SG','SF','PF','C')\\ \node (f) at (8,-5) {\begin{varwidth}{2.5in} \begin{tabular}{|l|} \hline -\rowcolor{Gray}Match\\ +\rowcolor{Gray}Game\\ \hline -\underline{id\_match}\\ -Date\_match\\ +\underline{id\_game}\\ +Date\_game\\ \#id\_equipe\_domicile\\ \#id\_equipe\_exterieur\\ Ville\\ @@ -305,7 +305,7 @@ Prolongation\\ \rowcolor{Gray}JOUE\\ \hline \underline{\#id\_joueur}\\ - \underline{\#id\_match}\\ + \underline{\#id\_game}\\ Points\\ Rebonds\\ Interceptions\\ @@ -351,14 +351,13 @@ Le MLD ci-dessus stocke les donn\'ees des matchs NBA. \begin{enumerate} \item (20 points) Lister dans une table \code{TLIGNES} tous les - joueurs d'un \'equipe donn\'ee par l'utilisateur et d'une ann\'ee - saisie par l'utilisateur, afficher leur nom, pr\'enom, poste et le - nombres de match o\`u il a fait 0, 1, 2, 3, 4 ou 5 fautes, durant - cette ann\'ee civile : + joueurs d'un match donn\'e par l'utilisateur, afficher leur nom, + pr\'enom, poste et le nombres de match o\`u il a fait 0, 1, 2, 3, 4 + ou 5 fautes, durant sa carri\`ere : \begin{center} \begin{small} \begin{verbatim} - EQUIPE XXX + GAME XXX Nom Prenom Poste XXXXXX XXXXXXX XXXXXX Fautes Nb Matchs @@ -383,54 +382,47 @@ Le MLD ci-dessus stocke les donn\'ees des matchs NBA. \begin{SaveVerbatim}{eqpts} -variable equipe char(4) -prompt Entrer une equipe -accept vequipe +@2020nba-setup.sql; +DROP TABLE TLIGNE; +CREATE TABLE TLIGNE(LIGNE VARCHAR2(200)); -variable vannee number -prompt Entrer une annee -accept vannee +variable vidgame varchar2(10) +prompt Entrer un game +accept vidgame DECLARE -dnom varchar2(20); -dprenom varchar2(20); +dnom varchar2(200); +dprenom varchar2(200); dposte char(2); -didjoueur NUMNER; +didjoueur varchar2(20); dnbfautes number; -dcpt number; +dfautes number; -CURSOR Cnom IS SELECT j.idjoueur, j.Nom, j.Prenom, j.Poste FROM JOUEUR j, -JOUE e, MATCH m WHERE j.id_joueur = e.id_joueur and id -AND ( m.Date_Match > TO_DATE('01/01/'||'&vannee',DD/MM/YYYY) AND -m.Date_Match < TO_DATE('12/31/'||'&vannee',DD/MM/YYYY) ); +CURSOR Cnom IS SELECT j.id_joueur, j.Nom, j.Prenom, j.Poste +FROM JOUEUR j, JOUE e +WHERE j.id_joueur = e.id_joueur AND e.id_game = '&vidgame'; + +CURSOR Cfaute IS SELECT FAUTES, COUNT(ID_game) FROM JOUE WHERE id_joueur = didjoueur GROUP BY FAUTES ORDER BY FAUTES; -CURSOR Cfaute IS SELECT COUNT(ID_match) FROM JOUE -WHERE id_joueur = didjoueur -GROUP BY FAUTES; BEGIN -INSERT INTO tligne VALUES (EQUIPE'||'&vequipe'); INSERT INTO tligne VALUES ('Nom Prenom Poste'); + OPEN Cnom; FETCH Cnom INTO didjoueur, dnom, dprenom, dposte; -WHILE Cnom%found LOOP - INSERT INTO tligne VALUES (dnom||' '||dprenom||' '||dposte); +WHILE Cnom%found LOOP + INSERT INTO tligne VALUES (dnom||' '||dprenom||' '||dposte); OPEN Cfaute; - - dcpt:=0; - INSERT INTO tligne VALUES (Faute Nn Matchs); - FETCH Cfaute INTO dnbfaute; - WHILE Couest%found LOOP - INSERT INTO tligne VALUES (dcpt||' '||dnbfaute); - dcpt:=dcpt+1; - FETCH Cfaute INTO dnbfaute; + INSERT INTO tligne VALUES ('Faute Nb Matchs'); + FETCH Cfaute INTO dfautes, dnbfautes; + WHILE Cfaute%found LOOP + INSERT INTO tligne VALUES (TO_CHAR(dfautes)||' '||TO_CHAR(dnbfautes)); + FETCH Cfaute INTO dfautes, dnbfautes; END LOOP; CLOSE Cfaute; - FETCH Cnom INTO didjoueur, dnom, dprenom, dposte; END LOOP; CLOSE Cnom; - END; . /