Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.27 KB | None | 0 0
  1. /*
  2. 1:
  3. Skrifið stored procedure: StudentListJSon() sem notar cursor til að breyta vensluðum gögnum í JSon string.
  4. JSon-formuð gögnin eru listi af objectum.
  5. OBS: StudentListJSon skilar texta sem þið hafið formað.
  6.  
  7. Niðurstöðurnar ættu að líta einhvern vegin svona út:
  8.  
  9. [
  10. {"first_name": "Guðrún", "last_name": "Ólafsdóttir", "date_of_birth": "1999-03-31"},
  11. {"first_name": "Andri Freyr", "last_name": "Kjartansson", "date_of_birth": "2000-11-01"},
  12. {"first_name": "Tinna Líf", "last_name": "Björnsson", "date_of_birth": "1998-08-14"},
  13. {"first_name": "Magni Þór", "last_name": "Sigurðsson", "date_of_birth": "2000-05-27"},
  14. {"first_name": "Rheza Már", "last_name": "Hamid-Davíðs", "date_of_birth": "2001-09-17"},
  15. {"first_name": "Hadría Gná", "last_name": "Schmidt", "date_of_birth": "1999-07-29"},
  16. {"first_name": "Jasmín Rós", "last_name": "Stefánsdóttir", "date_of_birth": "1996-02-29"}
  17. ]
  18. */
  19. delimiter $$
  20. drop procedure if exists StudentListJSon $$
  21.  
  22. create procedure StudentListJSon()
  23. begin
  24. declare fnafn varchar(255);
  25. declare lnafn varchar(255);
  26. declare dateob date;
  27.  
  28. declare json_string text;
  29. declare done int default false;
  30.  
  31. DECLARE cursor1 CURSOR FOR SELECT firstName, lastName, dob FROM Students;
  32.  
  33. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
  34.  
  35. set json_string = "[";
  36.  
  37. select json_string;
  38.  
  39. OPEN cursor1;
  40. read_loop:loop
  41. FETCH cursor1 INTO fnafn, lnafn, dateob;
  42.  
  43. if done then leave read_loop;
  44. end if;
  45.  
  46. set json_string = concat(json_string, '{"first_name": ','"', fnafn,'", "last_name": ', '"', lnafn, '", "date_of_birth": ', '"', dateob, '"},');
  47.  
  48.  
  49. # FETCH cursor1 INTO fnafn, lnafn, dateob;
  50. end loop;
  51.  
  52. CLOSE cursor1;
  53.  
  54. set json_string = trim(trailing ',' from json_string);
  55. set json_string = concat(json_string, "]");
  56.  
  57. select json_string;
  58.  
  59. end $$
  60.  
  61. delimiter ;
  62.  
  63. call StudentListJSon();
  64.  
  65. /*
  66. 2:
  67. Skrifið nú SingleStudentJSon()þannig að nemandinn innihaldi nú lista af þeim áföngum sem hann hefur tekið.
  68. Śé nemandinn enn við nám þá koma þeir áfangar líka með.
  69. ATH: setjið nemandann sem object.
  70. Líkleg niðurstaða:
  71.  
  72. {
  73. "student_id": "1",
  74. "first_name": "Guðrún",
  75. "last_name": "Ólafsdóttir",
  76. "date_of_birth": "1999-03-31",
  77. "courses" :[
  78. {"course_number": "STÆ103","course_credits": "5","status": "pass"},
  79. {"course_number": "EÐL103","course_credits": "5","status": "pass"},
  80. {"course_number": "STÆ203","course_credits": "5","status": "pass"},
  81. {"course_number": "EÐL203","course_credits": "5","status": "pass"},
  82. {"course_number": "STÆ303","course_credits": "5","status": "pass"},
  83. {"course_number": "GSF2A3U","course_credits": "5","status": "pass"},
  84. {"course_number": "FOR3G3U","course_credits": "5","status": "pass"},
  85. {"course_number": "GSF2B3U","course_credits": "5","status": "pass"},
  86. {"course_number": "GSF3B3U","course_credits": "5","status": "fail"},
  87. {"course_number": "FOR3D3U","course_credits": "5","status": "fail"}
  88. ]
  89. }
  90. */
  91. delimiter $$
  92. drop procedure if exists SingleStudentJson $$
  93. create procedure SingleStudentJSon(
  94. stuID int
  95. )
  96. begin
  97.  
  98. declare student_id int;
  99. declare fname varchar(32);
  100. declare lname varchar(32);
  101. declare dateob date;
  102.  
  103. declare c_num varchar(32);
  104. declare c_cred int;
  105. declare stat varchar(10);
  106.  
  107. declare json_string text;
  108.  
  109. declare done int default false;
  110.  
  111. declare courseCursor cursor
  112. for select Courses.courseNumber, Courses.courseCredits,
  113. case
  114. when Registration.passed = 1 then 'pass'
  115. else 'fail'
  116. end
  117. from Courses
  118. inner join TrackCourses on Courses.courseNumber = TrackCourses.courseNumber
  119. inner join Registration on TrackCourses.courseNumber = Registration.courseNumber
  120. and Registration.studentID = stuID;
  121.  
  122. declare continue handler for not found set done = true;
  123.  
  124. select studentID, firstName, lastName, dob
  125. into student_id,fname,lname,dateob
  126. from Students where studentID = stuID;
  127.  
  128. set json_string = "{";
  129.  
  130. set json_string = concat('"student_id": ','"',student_id,'", ',
  131. '"first_name": ','"',fname,'", ',
  132. '"last_name": ','"',lname,'", '
  133. '"data_of_birth": ','"',dateob,'", ',
  134. '"courses": [');
  135.  
  136. open courseCursor;
  137.  
  138. read_loop: loop
  139. fetch courseCursor into c_num, c_cred, stat;
  140. if done then leave read_loop;
  141. end if;
  142.  
  143. set json_string = concat(json_string, '{"course_numer": ', '"',c_num,'", ',
  144. '"course_credits": ', '"',c_cred,'" ,',
  145. '"course_status": ', '"',stat,'"},');
  146. end loop;
  147. close courseCursor;
  148. set json_string = trim(trailing ',' from json_string);
  149. set json_string = concat(json_string, ']}');
  150.  
  151. select json_string;
  152.  
  153. end $$
  154. delimiter ;
  155.  
  156. call SingleStudentJSon(1);
  157.  
  158. /*
  159. 3:
  160. Skrifið stored procedure: SemesterInfoJSon() sem birtir uplýsingar um ákveðið semester.
  161. Semestrið inniheldur lista af nemendum sem eru /hafa verið á þessu semestri.
  162. Og að sjálfsögðu eru gögnin á JSon formi!
  163.  
  164. Gæti litið út einhvern veginn svona(hérna var semesterID 8 notað á original gögnin:
  165. [
  166. {"student_id": "1", "first_name": "Guðrún", "last_name": "Ólafsdóttir", "courses_taken": "2"},
  167. {"student_id": "2", "first_name": "Andri Freyr", "last_name": "Kjartansson", "courses_taken": "1"},
  168. {"student_id": "5", "first_name": "Rheza Már", "last_name": "Hamid-Davíðs", "courses_taken": "2"},
  169. {"student_id": "6", "first_name": "Hadríra Gná", "last_name": "Schmidt", "courses_taken": "2"}
  170. ]
  171. */
  172.  
  173. delimiter $$
  174. drop procedure if exists SemesterInfoJSon $$
  175. create procedure SemesterInfoJSon(
  176. id int
  177. )
  178. begin
  179. declare stu_id int;
  180. declare stu_fname varchar(32);
  181. declare stu_lname varchar(32);
  182. declare stu_course int;
  183.  
  184. declare json_string text;
  185.  
  186. declare done int default false;
  187.  
  188.  
  189. # declare courseCursor cursor
  190. # for select distinct Students.studentID, Students.firstName, Students.lastName, count(Registration.courseNumber)
  191. # from Semesters
  192. # inner join Registration on Semesters.semesterID = Registration.semesterID
  193. # inner join Students on Registration.studentID = Students.studentID
  194. # where Semesters.semesterID = id;
  195.  
  196. declare courseCursor cursor
  197. for select distinct Students.studentID, Students.firstName, Students.lastName, count(Registration.courseNumber)
  198. from Students
  199. inner join Registration on Students.studentID = Registration.studentID
  200. and Registration.semesterID = id
  201. group by Students.studentID;
  202.  
  203. declare continue handler for not found set done = true;
  204.  
  205. open courseCursor;
  206.  
  207. set json_string = "[";
  208. read_loop: loop
  209.  
  210. fetch courseCursor into stu_id, stu_fname, stu_lname, stu_course;
  211.  
  212. if done then leave read_loop;
  213. end if;
  214.  
  215. set json_string = concat(json_string, '{"student_id": ', '"',stu_id,'", ',
  216. '"first_name": ', '"',stu_fname,'" ,',
  217. '"last_name": ', '"',stu_lname,'",',
  218. '"course_taken": ', '"',stu_course,'"},');
  219. end loop;
  220. close courseCursor;
  221. set json_string = trim(trailing ',' from json_string);
  222. set json_string = concat(json_string, ']');
  223.  
  224. select json_string;
  225.  
  226. end $$
  227. delimiter ;
  228.  
  229. select * from Students;
  230.  
  231. call SemesterInfoJSon(2);
  232.  
  233. -- ACHTUNG: 2 og 3 nota líka cursor!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement