diff --git a/EXOS/Exam2019.tex b/EXOS/Exam2019.tex index 40283ab..a64bda4 100644 --- a/EXOS/Exam2019.tex +++ b/EXOS/Exam2019.tex @@ -527,8 +527,168 @@ Nombre de personnels total sur l'hopital : ZZ2 %% affectation entre un patient et un membre du pesonnel. V\'erifier %% que le patient et le personel existent d\'ej\`a. + + \begin{SaveVerbatim}{questionune} +int main(int argc, char** argv) +{ +varchar vnom[20]; +varchar vprenom[20]; +varchar vhopital[20]; +char vidhopital[6]; +int fini; +int fin=1; +int vnbnom; +int vnbhopit; +int nb=1; + + EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n"); + printf("\n Appel de la fonction connexion"); + connexion(); + printf("\n Appel de la fonction deconnexion"); + + /*----------------------------------lecture----------------------------*/ + EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n"); + + /* SELECT p.Nom, p.Prenom, h.Nom FROM PERSONNEL p, HOPITAL h WHERE h.id_hopital = p.id_hopital and p.id_personnel='PE01'; */ + /* printf("\nUn exemple PE01 \n");*/ + + EXEC SQL SELECT p.Nom, p.Prenom, h.Nom INTO :vnom, :vprenom, :vhopital FROM PERSONNEL p, HOPITAL h WHERE h.id_hopital = p.id_hopital and p.id_personnel='PE01'; + + vnom.len=strlen(vnom.arr); + vprenom.len=strlen(vprenom.arr); + vhopital.len=strlen(vhopital.arr); + + printf("\n TEST pour PE01 : Nom : %.*s prenom : %.*s hopital : %.*s \n", vnom.len, vnom.arr, vprenom.len, vprenom.arr, vhopital.len,vhopital.arr); + + printf("\n Affichage les hopitaux \n"); + + /* SELECT COUNT(h.Nom) FROM HOPITAL h */ + EXEC SQL SELECT COUNT(h.Nom) INTO :vnbhopit FROM HOPITAL h; + printf("\nNombre d'hopitaux est %d\n",vnbhopit); + + EXEC SQL DECLARE hopitaux CURSOR FOR SELECT Nom, id_hopital FROM HOPITAL ORDER by Nom; + EXEC SQL OPEN hopitaux; + + EXEC SQL FETCH hopitaux INTO :vhopital, :vidhopital; + if (sqlca.sqlcode == 1403) {fin = 0;} + while (fin!=0) + { + vhopital.len=strlen(vhopital.arr); + printf("\n Affichage des personnels de l'hopital %.*s : \n",vhopital.len,vhopital.arr); + + /* SELECT COUNT(p.Nom) FROM PERSONNEL WHERE h.id_hopital = p.id_hopital; */ + EXEC SQL SELECT COUNT(Nom) INTO :vnbnom FROM PERSONNEL WHERE id_hopital = :vidhopital; + printf("\nNombre de personnel de l'hopital %.*s est %d\n",vhopital.len,vhopital.arr, vnbnom); + + /* SELECT p.Nom, p.Prenom FROM PERSONNEL p, WHERE h.id_hopital = p.id_hopital ORDER by p.prenom ; */ + EXEC SQL DECLARE personnels CURSOR FOR SELECT Nom, Prenom FROM PERSONNEL WHERE id_hopital = :vidhopital ORDER by prenom; + + EXEC SQL OPEN personnels; + fini=1; + EXEC SQL FETCH personnels INTO :vnom, :vprenom; + if (sqlca.sqlcode == 1403) {fini = 0;} + + while (fini!=0) + { + vnom.len=strlen(vnom.arr); + vprenom.len=strlen(vprenom.arr); + + printf("%d) Nom : %.*s Prenom : %.*s \n", nb, vnom.len, vnom.arr, vprenom.len, vprenom.arr); + nb++; + EXEC SQL FETCH personnels INTO :vnom, :vprenom; + if (sqlca.sqlcode == 1403) {fini = 0;} + } + EXEC SQL CLOSE personnels; + + EXEC SQL FETCH hopitaux INTO :vhopital, :vidhopital; + if (sqlca.sqlcode == 1403) {fin = 0;} + } + printf(" Fini \n"); + EXEC SQL CLOSE hopitaux; + + deconnexion(1); + return(0); +} +\end{SaveVerbatim} + + \cache{%\begin{small} + \BUseVerbatim{questionune} +% \end{small} +} + \begin{SaveVerbatim}{Insertion} -TODO +int main(int argc, char** argv) +{ +char vidperso[20]; +char vidfonction[20]; +char vidhopital[6]; +VARCHAR vnom[20]; +VARCHAR vprenom[20]; +char eidperso[20]; +char eidfonction[20]; +char eidhopital[6]; +VARCHAR enom[20]; +VARCHAR eprenom[20]; +int nbhopital=0; +int nbfonction=0; +int nbperso=1; + + + EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n"); + printf("\n Appel de la fonction connexion"); + connexion(); + printf("\n Appel de la fonction deconnexion"); + + /*----------------------------------lecture----------------------------*/ + EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n"); + + printf("Saisir un nouveau personnel \n"); + printf("Entrer son nom : "); + scanf("%s",vnom.arr); + vnom.len=strlen(vnom.arr); + printf("Entrer son prenom : "); + scanf("%s",vprenom.arr); + vprenom.len=strlen(vprenom.arr); + + do{ + printf("Entrer son id hopital : "); + scanf("%s",vidhopital); + EXEC SQL SELECT COUNT(*) INTO :nbhopital FROM HOPITAL WHERE id_hopital=:vidhopital; + //printf("nbhopital %d\n",nbhopital); + } + while (nbhopital !=1); + + do{ + printf("Entrer son id personnel : "); + scanf("%s",vidperso); + EXEC SQL SELECT COUNT(*) INTO :nbperso FROM PERSONNEL WHERE id_personnel=:vidperso; + if (nbperso==1){ + printf("Ce numero de personnel existe deja\n"); + EXEC SQL SELECT * INTO :eidperso, :eidfonction, :eidhopital, :enom, :eprenom FROM PERSONNEL WHERE id_personnel=:vidperso; + printf("ID PERSO : %s \n",eidperso); + printf("ID FONCTION : %s \n",eidfonction); + printf("ID HOPITAL : %s \n",eidhopital); + printf("NOM : %s \n",enom.arr); + printf("PRENOM : %s \n",eprenom.arr); + } + } + while (nbperso !=0); + + do{ + printf("Entrer son id fonction : "); + scanf("%s",vidfonction); + EXEC SQL SELECT COUNT(*) INTO :nbfonction FROM FONCTION WHERE id_fonction=:vidfonction; + } + while (nbfonction !=1); + + EXEC SQL INSERT INTO PERSONNEL VALUES (:vidperso,:vidfonction,:vidhopital,:vnom,:vprenom); + + EXEC SQL COMMIT; + + + deconnexion(1); + return(0); +} \end{SaveVerbatim} \cache{%\begin{small}