Vous êtes sur la page 1sur 31
Université Mohamed ler Faculté des Sciences Département d’informatique Filigre SMI Semestre 6 Examens corrigés Module : Bases de données avancées Années universitaires 2014/2018 Professeur : M. MOUSSI ee ee cic Menaie Année universitate : 2014/2015 Faeulcé des Belenees igre SML, semestre 6 Département de Mathématiques ct Informatique Bases de données avaneées ordinaire ‘Questions de cours 1. Donner en langage SQL les ea 8) Créer un utlisateur 1) Donner le privilége de connexion la base de données jour 1 ati ©) Retirer le privilége de eréation de vue d'un ullsate + permeltent (sous Onnele) he 2. Pours décarations des variables suivanesdtrmine, ave justo, celles sont correctes et eelles gui sot incorectes Déclaration ‘Correetel incurecte sification | DECLARE ei | VI VARCHARDD. DECLARE i [Fe ns nan jaca ——— 2 Toate noo. ‘DECLARE _ ff rar bare DECLARE Variable varchar2(9:=280b Bxer Ecrire en langage PL/SQL une procédure qui prend en pa cet entier est glouton ou non, On dit qu'un enticr est "glouton” s'il posséde strictement plus de diviseurs que chacun des nombres inféreurs& lui. (Exemples : 12 est glouton ; 18 rest pas glouton). re un ener et afche si Exercice 2. ‘On considere le schéma relation! su ctudiant (NE, Nom, Adresse, Vile) Imatiere (NM, Nom, Coefficient, type) evaluation (NE, NM, DoveBval, Note) Ecrire un programme PL/SQL qui permet de Susirun cetuin numéro de wate et vii si toutes les notes oblenues dans cette matire (par tous les tudiants) est inféicur A 1 alors Ie champ (ype dela able mater sera. mise &'not_easy,sinon il sera mise ‘easy NB. Le programme doi uiliser les curseurs explicites ordinaire 201472015 Questions de cours 3, Donner en langage SQL les equetes permettent (sous Oracle) de a) CREATE USER nom_aser IDENTIBIED BY mot_pass: ©) GRANT CREATE SESSION TO om _user D_REVOKE CREATE VIEW PROM nom_user Bxereice 1 {ereate oF replace procedure glowion(a in number) begin declare nenumber 0; rd number + boolean =trve begin ~caleul du nombre de diviseur de n for in Ln loop if mod(n.)=0 then end loop, ~-caleul du nombre de diviseur de chaque enier For pin Ln loop nd=0, for in Lp loop if mod{p.i} then nd=nd"1; end if. itnd>ng then false exit end if end loop: end loop, ite then ddbms else dbms_ output put_inegloutton); end if end end Exercice 2 accept numero Ueclare hum matiere.nm?étype ~&numero, note_ct evaluation note’ type nombre des lingnes inf a 10 number =0 --nombre total des lignes rt number =6 select note from evaluation, where nm=nun begin for cine note loop nt=atel ife.note=10 then n=atl end if cend loop: ddbms_output put_line(‘le nombre total est’ nt) dbms_output pur inet le nombre est n) joules les notes sont inferieurs & 10 if nn then update matiere sel type='not_easy where am=&numero else update matiere set type=easy’ where end: Université Mohamed 1°" Année universitaire : 2014/2015 Faculté des Sciences Fillere SMI, semestre 6, Département de Mathématiques et Informatique Bases de données avancées Examen rattrapage Durée : th 30min Questions de cours 4. Donner la syntaxe générale pour eréer une vue, 5. Quelle est Putlite de la commande WITH CHECK OPTION? 6 Quel est effet de suppression d'une vue sur les tables référencées. Bxercice 1 Eerie en langage PL/SQL une procédure qu prend en paramétre un enter et afliche si cet enter est square-free ou non On dit qu'un enie posit mest "square-tree™ si pour tous les nombres premicts p le carré de p (p') ne divise pas n. (Exemple 10 est square-iee, 18 nest pas square: free puisqu'il est divisible par 3°. i Exereice 2. On considéze le chéma relationne suivant etudiant (NE, Nom, Adresse, Vile) Imatiere (NM, Nom Coefficiem, at) evaluation (NE, NM, DateEval, Note) Eerire un programme PL/SQL qui lit uncertain nom de mtiére et une date, puis véritie si aucune évaluation na eu lieu dans cette matiee apres cette date alors la matiére sera supprimée dela table matiee, : ‘© sinon la valeur de 1'éat de la matiére sera mise a «ok » (NB. Le programme doit uiliser les curseurs et les excepticns uilisateu. Solution Examen rattrapage 2014/2015 Questions de cours CREATE [OR REPLACE } [FORCE\NOFORCE} VIEW Nom Fue calomel...) } AS SELECT [WITH CHECK OPTION | WITH READ ONLY J. 2. WITH CHECK OPTION : impose que toutes ls instructions de modification de données exseutées sur la vue respecten Ie citere defini dans la equéte SELEC 3._Lasuppresson dune we a aucun ele sur les tables reerencées. Bxercice ‘rete or replace procedure squarefice(nin umber beein declare ‘ng number0;-nombre de dvisur premiers en car npnumber=0. 8 umber, "bole =e; begin ~alul du nombre de visa en double ds premiers den Tori in 2.1 loop “je cere et premise for} in 2] lop ‘fmod,)-0 then mp=nptl; cdi end lop: ‘tap =0 hen je shea ie premier et divible en cané ifmodtni-0 then a esta: “ext ne=net endif nif end oop: ifng> Orbea ‘domsouput put ling nen sais), ose soup put linet square) endif, nd snd Brercice accept nom secept date ev DECLARE number, excep! EXCEPTION, ‘excep EXCEPTION. CURSOR curs_evis select dateEval from evaluation e, matiere m where ¢NM=-m.NM_ and mNom*&nom’ and e dateEval > &date_ev BEGIN ou ben utisercus_evrowcount ces die open cus ev lms ouput pu line(cus_evooncou) “eles cus. ev; fore incurs loop exit when eurs_evnotfound panel end loop: lms. outps pine nome etn), ite then ise except: else ase excep? tnd if EXCEPTION ‘when excep then delete fom mate ‘where som=&nom ven excep? dea update mate set tatk! where pom= nom END: Université Mohamed 1" ‘Année universitaire: 2015/2016 Faculté des Seiences sre SMA, semestre 6 Département dIaformatique Bases de données avancées ‘Examen ordinaire Durée : th 30min Questions de cours: Soit la vue vueeud (Nom, Adresse) sur lable sudian (MElé primaire de ype enter, Nom de ape cha(10), Adresse de ype char0) 1) Donner la syntane de cxation de la vue vue_etad. 2) stil posible d'inséer des données a travers la cette ue? La réponse doit étre Justifie 13) Domer la commande permettant d'attibuer le pivilége de sletion sur vue_etud Exercice 1 1) Eerite une fonction en langage PLISQL nommée test parfait qui pred en parame tum eter mo test si cet enter est parfsit ou non 2) Enutlisan la fonction fst parfait, rice va programe PLISQL qui lit un enter m et alice les nombres pfs infriurs et ener IN. B. Un nombre est dit para s'l et gala somme de ses diviseurspropes, (Exemple le nombre 6 est parfait, 6142+3) Bxercice2. ‘On considre le schéma reationnel suivant ctudiant (NE Nom_et, Adresse Vile) Inatiere (VM, Nomcmat Coepterent, pe) valuation (VE. NM, DateBva, Note) Inetleurs (NM, Nom 2, note) erie un programme qui permet de 1) Saisirun enter metus numéro de mate. 2) Recupérer le nom tla note des» meilleurs uns selon leurs notes dans eete satire 13) Enegiser le numero dela matte es noms des était et leurs notes dans la able ameileus NB: Le programme doit utiliser les eurseurs Solution examen ordinaire 2015/2016 Questions de cours: Soit a vue ye tua (Now, Adresse) sur la able Etudian (NE cI primaire de type enter Nom de ype char(10), Adresse de ype char(0). 4) CREAETE OR REPLACE VIEW we etud AS SELECT nom adresse FROM etdiant 5) Iles ps possible d inséer des données ravers cette vue, ar elle ne content pas Vatibut NE gui ex cé primaie est dane n'admet pas une valeur null (6) GRANT SELECT ON we erud (10 nom user} Exereice 1 3) CREATE OR REPLACE FUNCTION test parfit( nin number) RETURN BOOLEAN AS. BEGIN DECLARE ‘S number 0 FOR INL IEMODIa, S84 ENDIF, END Loop, IFS=n THEN R= TRME: ENDIF, RETURN R, END; END; r 4) ACCEPT m BEGIN POR 1 IN1.&m loop IF test parfii)-TRUE THEN DBMS_OUTPUT PUT.LINE(: ENDIF, END LOOP; END; Bxercice 2 ACCEPT n ACCEPT num_mat DECLARE ‘g_meil meileus*4ROWTYPE CURSOR meil_eurseur 18 SELECT v.NM, enom_et, vnote FROM etudian , evaluation v WHERE. vNE-eNE and.» NM-8enum_mat OEDER BY v.note DESC; BEGIN OPEN mel eurseur FOR JIN 1-én LOOP FETCH meil_curseur INTO Ig_meil INSERT INTO meilleurs VALUES (Ig_meil NM, lg_meil.Nom_et, Ip mei. note ) END LooP CLOSE meil_curseur END ‘Mohamed 1° Année universitaire : 2015/2016 Faculté des Sciences Filiere SMI, semestre 6, Département d'Informatique Bases de données avancées Examen rattrapage Durée : 1h 30min Questions de cours 7) Pout les délarations des variables suivantes en PLISQL determiner. avec jstieation celles qui sont corrects et elles qui sont incomes “Dédlarati (DECLARE FarQN NUMBER.) DECLARE vont BOOLEAN DECLARE T 7 Var var? NUMBER, ‘DECLARE z 1 Var VARCHAR), | ‘DECLARE Vtere Dare. [Dectans Variable vorchar2(4)~al2b, Correct! sree | Jusifeation 8) Donner Vinsrstion permetant 'exéeuter es Foetons sous SQL*Pus Bere 1 ‘Deux nombres enters em sont is ama: lasomune des diviseurs de (non ‘compris) et dgale& met In somme des diviseursde-m ("aon compris es gale (Bxemple 220 e284 sort amicaux) 5} Eerie une Fonction nommée er_ami qui pred en parametre deux enters tm et etoure une valeur booldenne selon quis Son amicaux ou non 6) En utilisant a fonction fami, ire un programme PLISQL qu lit deux enters N et M eLafice un message selon quis sont amicaux ou non 7 Bxercice?, (On conse le schéma elation suivant ‘tudiant (NE Nom et, Adresse Vile) Imatiere (NM, Nowa, Coefcient, ype) evaluation NEW NM, Devo. Not) Eerie un bloc PL/ SQL qui permet de ie un entire un cern numéro de mate equi vitife ‘+ Silenombre des éiuians ayant otenu I not a pls haute ou bien a note la lus basse est infrieur alors le programme fice Tes noms de ces cudnt. ‘+ Sinon le programme affiche le message « le nombre des état et supérieur n» NB: Le bloc doit user es eurseurs tes exceptions. Solution examen rattrapage 2015/2016 Exerciee | » ‘CREATE OR REPLACE FUNCTION fet amin in number, m is number) RETURN BOOLEAN AS. BEGIN DECLARE ‘SI number=0; ‘S2number=0, RBOOLEAN:= FALSE; BEGIN FOR iN J.2-t bop. IF MOD(n,)=0 THEN Si=Sli; ENDIF, END Loop, FOR i IN 1-1 loop IF MOD(m.)-0 THEN 82-824 ENDIF, END LOOP: IF Si=m and $2=n THEN R= TRUE; ENDIF; RETURNR: END, END; , » ACCEPT N ‘ACCEPT M DECLARE BOOLEAN: BEGIN info ami(&N,&M); IF R=TRUE THEN DBMS_OUTPUTPUT.LINE(Ies deux enters son! amicau’), ELSE ‘DBMS_OUTPUT PUT_LINEY les deux enters ne sont pas mieux’) ENDIF. END; 1 Bxercice 2 asi des valeurs ACCEPT n ACCEPT um mat DECLARE nb.max number: nbzmin umber: xcept exception CURSOR lise etiam is select Nom from etuant a join evaluation bow aNE=h NE svhere bbNote=seloetmaxtNote) from evltion where nn nun a for bNote={Selee mintNote fon evaluation where baum Anu ety and =u BEGIN ‘rdeupérer le nombre des tudo ayant oben fa nate max dans fa marie numa select courte) as “nomibee ayant max" into nb. max from evaluation ‘where rnotexseleet max(aot) fom evaluation where nm-Anum_ mat) and am-fnum_mat, -~rdeupére le sombre des éadians ayaa obtens a note min dans la mater, mat selec coun(e) as "nombre ayant i ino nin fom evaluation were note=seleetmin(ot) fom evaluation where nn=dnum mat) and amu mat; si un des dex nombres =n jaffiche ta iste des dit TF nb_max -21), 49) Creer Index nom nom_lae avec unc des valeurs indexdes, sur I alone "Nom del ble Personne $5) SupprimerYindex nom id del eolonne Nom Exercice 2. On considére le schémareltonnel suivant ctudint (NE, Nomet, Adresse, Vile resulta, Imatiere (NM, Nom_mar, Coefficient) ‘naluation (NE, Ni, Dateval, Not) Barre un programme PLISQL qui permet de '4) Sasi un certain numéro d'un 5) Si étaiant existe ps, le programme afiche le message "existe pas 6) Sil tuiant existe alors « Sitouts ss noes sont supérieure 10 alors but rest Sera mis & our ‘vee a valeur “ok ‘6, Sinon abut result sera mis jouravee Ia valeur "non ok Exercice 3 Eerte un programme PLISQL qui permet de ‘© Saisieun enter, + Calculer et fficher le nombre ds divsews den Sol ian Examen ordinaire 2016/2017 Exercice 1 Soit la table "Personne Num{ Nom Age) Ville] ra 20" [Ou © lace — artes (3 ttameal 30a 4 [Zakan 5 fous (6) Leexéeution dy programme wénte eter suivante: xction xm pls ule nombre e lignes demande. En afecte plscus valeurs phsicurs lignes en meme temps une seule variable » 1. CREATE VIEW permet 3 Vuilisateur deers des wes dans son propre sehen, b. CREATE ANY VIEW pen seems, ‘iL tlissteur de xér des ves dans ous les 5 (CREATE VIEW personne sew ASSELECT + ‘FROM Persone WHERE age >= 21 WITH CHECK OPTION. » (CREATE UNIQUE INDEX nom ide (ON Personne (nom) 10) DROP INDEX nom tax Exercice 2, accept numero DECLARE nombre NUMBER: rnombre_mat NUMBER nom et etdiant nom TYPE: red etdian eros, BEGIN je eherce seta existe SELECT coun) io nombre FROM ehudiant WHERE NE=&mmero, oombre>4 then -DBMS_OUTPUT.PUT_LINECexst) je clei le nombre dei matieres avec note <10 Select coun NM) into nombre_mat from evaluation where Note<10 ‘and NE= numero n=O then ~DBMS_OUTPUT PUT_LINB(omes les notes sn > 109 Uplate ewan Sefrestior= ok Where NE&rumero Ese =DBMS_OUTPUT PUT_LINB{ in des noes <) Uplate endian Ser resulta non of Whore NE=€omero end se DBMS_OUTPUT.PUT LINE} exe pa) endif. nd Exercice3. ccceptn begin “calc de nombre de diviseus de m “or in I. in loop ‘modi i)=0 then n= endif : end lop: ‘dons. ule): end; Université Mohamed 1" Année universitaire : 2016/2017 Faculté des Seiences re SMI, semestre 6, Département d'laformatique Bases de données avancées Bxamen rattrapage Durée: 1h 30min Exercice 1 Soit able “Persone” ete pogranine PLISQL suivants Num] Nom [Age] Ville 20 [Ovid 23 [Casa 50 Rabat (CREATE OR REPLACE FUNCTION pers fonet(aIN Personne Age%Type) RETOURN NUMBER bed ‘SELECT COUNT/um) INTO n FROM Personne: WHERE Age > a IF n=O THEN DAMS_OUTPUT PUT_LINEYpremier car) BLSEIP w=) THEN ‘DBMS_OUTPUT.PUT LINE( deuieme cas’) ont] PLSEIP =? THEN DBMS_OUTPUT PUT LINE olsieme cas) ELSE THEN DBMS_OUTPUT PUT LINECuetreme cas) fant ENDIF. RETOURN 1 END. 1) Corrger es erreurs de c= programme 2) DoanerVinsreton dexeution dela fonction pers fc! sous SQL pls 13) Donner le resulta o’exéeution dela onetion pers. jane pour les valeurs 10, = 30 ans Exerciee 2, (On consider le schéma relationnel suivant ctudiant (VE, Nom_et, Adresse, Ville, rela) ‘matiere (VM, Nom" mat. Coefcins, pe) evaluation (NE, Nil, DateBva. Note) Ecrre un programme PL/SQL qui permet de 1) Saisicun certain auméro d'tuiant 8) Si cet étudiant a évalué aw moins une fos lors 4 Sisa moyenne generale (la moyenne des matires dns lesqueles ila valu) est suptieure ou égale 10 alrs tutes ses notes seront augmenies pat lavaler 1 3 bs Sinom ues ses note srontsuymenées pal valeur 9) Si ct eudian n'a amas ee évalué alr le programme afiche le message “Eton! Jamats és” Baer, nen ntl scenes pie ed haem compro po cemented gut aprs uni gal Eee [ees on sony ope 0 so, 6 12.3836 48 69 (pr exept pone cet peti e,4) en rogue PLSQL qu poe i ner near ee inten Lng son auc coop Solution de Pexamen rattrapage 2016/2017 Exercice 1 Soil a table "Peronne” tle programme PLISOL suivants (Num ge Ville i Ouida z Cosa 3 Rabat a Ouida 1) CREATE OR REPLACE FUNCTION pers fone (a IN Personne Age?4Type ) RETURN NUMBER Is n number; imumber SELECT COUMTQun) IVTO m FROM Persone -pas de point vrgule WHERE Age > ‘DBMS_OUTPUT PUT LINE(e premier cas), ELSIF n=} THEN ‘DBMS_OUTPUT PUT LINE(tedeweme cas) ieanet ELSIF n=) THEN ‘DBMS OUTPUT PUT LINE(e rots ca’ ELSE ~ pas de THEN ‘DBMS_OUTPUT PUT_LINE(‘e quat cot) anes ENDIF RETURN; END: 2) select pers fonct(voeur from dal 3) a= I0alorsoffche 6; a= 30alors ache} et Bxercice2. (On considere le shéma relationnel suivant ctudian (NE, Nom et, Advesse Vile, resulta Imatere (NM, Nom mai, Coefficient, te) ‘valuation (NE. Nid, DateEval, Note) DECLARE nombre NUMBER ‘may NUMBER: rnambre mai NUMBER BEGIN Je cherche si etudiant a ete evalué ‘SELECT coun into nombre FROM evaluation WHERE NE=4umero uombre>0 then ‘DBMS_OUTPUT. PUT LINECevalué je alee la moyenne select ‘sum Note%e Coffcenynim( Coefcie) ito moy “rom eudianaevalation bmauirec ‘where a NE=b.NE fond bNM=c.NM ‘and b NE=Amumero ‘group by aNE: ‘fimoy>=10 then ‘DBMS. OUTPUT PUT_LINE(Ia moyenne et sup. ow eg 10) Update evaluation Ser Note=Note+1 ‘Where NE~&mumero Ble DBMS_OUTPUT.PUT_LINE( ta moyenne es inf a 10), Update evaluation Where NE>diounero endif. ELSE DBMS_OUTPUT PUT_LINEYmon eval’, fsercee 3. Unenter tue stent super a I thames compos agile ‘iement is edie en pon il ener pst 7 xemple nombres auemen compte infu eat 8 100 sua: 2, 6,12, 24,36, et & ceepin declare Kemanber: nb number 1 mumber; begin for in 2 a oop ye chorche hautement sieht cake nombre div nb for} EF loop ‘¥modtis)=8 then nheonb+ endif ent loop. fin caleul nombre div -comparer le nombre div oveek, kest nombre div ancien ‘forb>k) dhe DBNS_OUTPUT PUT_LiNE( || nb est hautemen’, DBMS_OUTPUT PUT-LiNEW), end if nb then be =nb end if end loop: cen Université Mohamed 1° Faculté des Seiences Département d'Informatique Année universitaire : 201772018 Filiére SMI, semestre 6 Bases de dom Examen ordinaire Durée : 1h 300 Dans toute la suite, on consider le schema relation suivant crudiant (UE, Nom, Adresse, Ville) matiere (NM, Nom, Coefficient ype) evaluation (#NE, 49M, DateEva, ety) Exercice 1 Soit le programme PL/SQL suivant declare number: -m number: +2; ddbms_output.put_tine(m)s ddbms_output.put-tine(n); end: 1) Donner avec justification le ésultat dexéeution de ce programme 2) En utilisant instruction when orhers et en supprimant la parte en gras, modifier le programme pour quil affiche le message Vous avez deus affectation... Exereice 2 Donner en langage SQL. les requétes permettant (sous Oracle) de 1) Créer un uilisateur nommé user en li affectant le tablespace system par détautet tablespace femp comme tablespace temporsie. 12) Donner le privlége de connexion i la base de données pour user 3) Donner le privilege de eréaton de table dans tus les schémas a user 4) Donner le privilege de consultation de a table evaluation & userl avee Voption qui li permet de donner ce prvilége& un autre uilisateur. Exerciee3. Ecrie un programme PL/SQL qui permet de © Saisicun eatin Simest supérieur ou gal au nombre de lignes de a table mire alors le programme alice toutes ls lignes dels able mate + Sinon le programme affiche les npremiéres lignes del teble mate NB. Le programme doit utiliser les curseursexplicies. Bxereice 4 Un emtier naturel (different de 1) est dit premier s'il posséde exactement deus

Vous aimerez peut-être aussi