diff --git a/EXOS/SOLUTIONS-DS2020/exo1.sql b/EXOS/SOLUTIONS-DS2020/exo1.sql new file mode 100644 index 0000000..74c7b74 --- /dev/null +++ b/EXOS/SOLUTIONS-DS2020/exo1.sql @@ -0,0 +1,41 @@ +drop table tresultat purge; +create table tresultat(ligne varchar2(200)); +variable vnbRef number +prompt nombre de référence? +accept vnbRef +declare +dnbRef number:='&vnbRef'; +didRep char(5); +dmessage varchar2(200); +dnbTot number; +inex exception; +cursor CUR is select I.idRep, sum(nbPlacesRes) + from inscription I, representation R + where I.idRep=R.idRep + and dateRep>sysdate + group by I.idRep + having sum(nbPlacesRes) > dnbRef + order by 2 desc; +begin + dmessage:='nombre de reference trop eleve'; + insert into tresultat values('Id rep Nb total'); + open CUR; + fetch CUR into didRep, dnbTot; + + if CUR%notFound then raise inex;end if; + while CUR%FOUND + loop + insert into tresultat values (didRep||' '||dnbTot); + fetch CUR into didRep, dnbTot; + end loop; + close CUR; + exception + when inex then insert into tresultat values (dmessage); +end; +. +/ +select * from tresultat; + + + + diff --git a/EXOS/SOLUTIONS-DS2020/exo2-q1.pc b/EXOS/SOLUTIONS-DS2020/exo2-q1.pc new file mode 100644 index 0000000..0297978 --- /dev/null +++ b/EXOS/SOLUTIONS-DS2020/exo2-q1.pc @@ -0,0 +1,42 @@ + + +int main(int argc, char** argv) +{ +char vidRep[6]; +char vdateRep[11]; +char vheureRep[5]; +int vnbPlaces; +char vidArtiste[6]; +int fin=1; +int vnbMax; +short indic; + + EXEC SQL WHENEVER SQLERROR DO sql_error("Pb connexion\n"); + printf("\n Appel de la fonction connexion"); + connexion(); + + EXEC SQL DECLARE rep CURSOR FOR SELECT idRep, nbplaces FROM representation; + EXEC SQL OPEN rep; + + EXEC SQL FETCH rep INTO :vidRep, :vnbPlaces:indic; + if (sqlca.sqlcode == +1403) {fin = 0;} + while (fin!=0) + { + vidRep[5]='\0'; + printf("\n num representation: %s \n",vidRep); + if (indic==-1) + printf("\n nb max?: "); + scanf ("%d%*c", &vnbMax); + EXEC SQL update representation set nbPlaces = :vnbMax where idRep=:vidRep; + EXEC SQL commit; + EXEC SQL FETCH rep INTO :vidRep, :vnbPlaces:indic; + if (sqlca.sqlcode == +1403) {fin = 0;} + } + printf(" Fini \n"); + EXEC SQL CLOSE rep; + + deconnexion(1); + return(0); +} + + diff --git a/EXOS/SOLUTIONS-DS2020/exo2-q2.pc b/EXOS/SOLUTIONS-DS2020/exo2-q2.pc new file mode 100644 index 0000000..c73cbde --- /dev/null +++ b/EXOS/SOLUTIONS-DS2020/exo2-q2.pc @@ -0,0 +1,57 @@ + + +int main(int argc, char** argv) +{ +char vdateRep[11]; +char vheureRep[6]; +char vidRep[6]; +int vnbPlaces; +int vnbPlacesRes; +int vTabNbPlacesRes[500]; +int i, nb, fin=1; + +connexion(); +EXEC SQL DECLARE REP CURSOR FOR SELECT to_char(dateRep, 'dd/mm/yyyy'), heureRep, idRep, nbPlaces +FROM representation +where dateRep>sysdate order by 1, 2; + +printf("\n liste des représentations"); +printf("\n dateRep Heure Rep Id Rep Nb places rés./Insc."); +// traitement curseur pour en tete représentation + EXEC SQL OPEN REP; + EXEC SQL FETCH REP INTO :vdateRep, :vheureRep, :vidRep, :vnbPlaces; + if (sqlca.sqlcode == +1403) {fin = 0;} + while (fin!=0) + { + vdateRep[10]='\0'; vheureRep[5]='\0';vidRep[5]='\0'; + printf("\n %s.....%s......%s\n",vdateRep,vheureRep,vidRep); // en tete rep + + // gestion détail places + EXEC SQL SELECT count(nbPlacesRes) + into :nb + FROM inscription I, representation R + where dateRep>sysdate and R.idRep=I.idRep and I.idRep=:vidRep; + + vnbPlacesRes=vnbPlaces; + if (nb>0){ // si on a des inscriptions + EXEC SQL SELECT nbPlacesRes + into :vTabNbPlacesRes + FROM inscription I, representation R + where dateRep>sysdate and R.idRep=I.idRep and I.idRep=:vidRep; + for (i=0; i0) + printf("\nmodif faite, on vous doit: %.2f euros", vdif); + else printf("\nmodif faite, vous devez: %.2f euros", vdif*-1); + } + } + deconnexion(1); + return(0); +}