/* Napisati program u C-u koji izdvaja imena i prezimena svih studenata koji su u septembarskom ispitnom roku 2007. godine prijavili barem one ispite kao student ciji se broj indeksa unosi sa standardnog ulaza. Na kraju ispisati njihov ukupan broj. */ #include #include /* ukljucujemo strukturu koja omogucava rad sa BP */ EXEC SQL INCLUDE SQLCA; /* deklaracija promenljivih kojima pristupa SQL * to su tzv host-promenljive */ EXEC SQL BEGIN DECLARE SECTION; long d_indeks; char d_ime[51]; char d_prezime[51]; EXEC SQL END DECLARE SECTION; /* funkcija za obradu greske */ int iserr(char err[]){ if (SQLCODE < 0){ printf("SQLCODE %ld %s\n\n", SQLCODE, err); EXEC SQL ROLLBACK; return 1; } return 0; } /* za poziv funkcije greske koristice se makro */ #define CHECKERR(s) if (iserr(s)) exit(1); int main(){ int i=0; /* povezujemo se na BP */ EXEC SQL CONNECT TO vstud user student using abcdef; CHECKERR("Connect"); /* ucitavamo broj indeksa sa standardnog ulaza */ printf("Unesite broj indeksa studenta:\n"); scanf("%ld", &d_indeks); /* deklarisemo kursor koji izdvaja imena i prezimena studenata koji zadovoljavaju uslov zadatka */ EXEC SQL DECLARE polozili CURSOR FOR select ime, prezime from dosije d where not exists(select * from ispit i where indeks = :d_indeks and godina_roka = 2007 and oznaka_roka = 'sep' and status_prijave = 'p' and not exists(select * from ispit where indeks = d.indeks and godina_roka = 2007 and oznaka_roka = 'sep' and status_prijave = 'p' and id_predmeta = i.id_predmeta )); CHECKERR("Declare polozili"); /* otvaramo kursor polozili */ EXEC SQL OPEN polozili; CHECKERR("Open polozili"); while(1){ EXEC SQL FETCH polozili INTO :d_ime, :d_prezime; CHECKERR("Fetch polozili"); /* ako smo naisli na kraj kursora zavrsavamo obradu */ if (SQLCODE == 100) break; i++; /* vrsi se ispis procitanih vrednosti */ printf("Student - ime = %s prezime = %s \n", d_ime, d_prezime); } printf("Ukupan broj studenata je: %d. \n", i); EXEC SQL CLOSE polozili; CHECKERR("Close polozili"); EXEC SQL CONNECT RESET; CHECKERR("Connect reset"); return 0; }