Advertisement
didito33

2nd one

May 14th, 2022
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.46 KB | None | 0 0
  1. DELIMITER $
  2. DROP procedure if exists testProc $
  3. Create procedure testProc()
  4. BEGIN
  5. select c.name as coach, sg.id as groupID
  6. from coaches as c
  7. join sportGroups as sg
  8. on c.id = sg.coach_id;
  9. END $
  10. DELIMITER ;
  11.  
  12. call testProc();
  13.  
  14. DELIMITER $
  15. DROP procedure if exists testProc $
  16. Create procedure testProc(in testParam VARCHAR(255))
  17. BEGIN
  18. select testParam;
  19. set testParam= 'Ivan';
  20. select testParam;
  21. END $
  22. DELIMITER ;
  23.  
  24. set @testName = 'Georgi';
  25.  
  26. call testProc(@testName);
  27. select @testName;
  28.  
  29.  
  30.  
  31.  
  32. use school_sport_clubs;
  33. #drop procedure checkMothTax;
  34. delimiter |
  35. CREATE procedure checkMothTax(IN studId INT, IN groupId INT, IN paymentMonth INT, IN paymentYear INT)
  36. BEGIN
  37. DECLARE result char(1);
  38. SET result = 0;
  39. IF( (SELECT paymentAmount
  40. FROM taxespayments
  41. WHERE student_id = studId
  42. AND group_id = groupId
  43. AND MONTH = paymentMonth
  44. AND year = paymentYear) IS NOT NULL)
  45. THEN
  46. SET result = 1;
  47. ELSE
  48. SET result = 0;
  49. END IF;
  50.  
  51. SELECT result as IsTaxPayed;
  52. end;
  53. |
  54. delimiter ;
  55. CALL `school_sport_clubs`.`checkMothTax`(1, 1,1,2020);
  56.  
  57.  
  58.  
  59.  
  60.  
  61. use school_sport_clubs;
  62. #drop procedure getAllPaymentsAmountOptimized;
  63. delimiter |
  64. CREATE procedure getAllPaymentsAmountOptimized(IN firstMonth INT, IN secMonth INT, IN paymentYear INT, IN studId INT)
  65. BEGIN
  66. DECLARE iterator int;
  67. CREATE TEMPORARY TABLE tempTbl(
  68. student_id int,
  69. group_id int,
  70. paymentAmount double,
  71. month int
  72. ) ENGINE = Memory;
  73.  
  74.  
  75. IF(firstMonth >= secMonth)
  76. THEN
  77. SELECT 'Please enter correct months!' as RESULT;
  78. ELSE IF((SELECT COUNT(*)
  79. FROM taxesPayments
  80. WHERE student_id =studId ) = 0)
  81. THEN SELECT 'Please enter correct student_id!' as RESULT;
  82. ELSE
  83.  
  84. SET ITERATOR = firstMonth;
  85.  
  86. WHILE(iterator >= firstMonth AND iterator <= secMonth)
  87. DO
  88. INSERT INTO tempTbl
  89. SELECT student_id, group_id, paymentAmount, month
  90. FROM taxespayments
  91. WHERE student_id = studId
  92. AND year = paymentYear
  93. AND month = iterator;
  94.  
  95. SET iterator = iterator + 1;
  96. END WHILE;
  97. END IF;
  98.  
  99. END IF;
  100. SELECT *
  101. FROM tempTbl;
  102. DROP TABLE tempTbl;
  103. END;
  104. |
  105. DELIMITER ;
  106. CALL getAllPaymentsAmountOptimized(1,6,2021,1);
  107.  
  108. -- 1 1. Създайте процедура, с която по подадено име на треньор се
  109. -- извеждат името на спорта, мястото, часът и денят на тренировка,
  110. -- както и имената и телефоните на учениците, които тренират.
  111.  
  112. DELIMITER $
  113. DROP procedure if exists firstTask $
  114. Create procedure firstTask(IN coachParam VARCHAR(255))
  115. BEGIN
  116. select coaches.name as coach, sports.name as sport, sportGroups.location, sportGroups.hourOfTraining, sportGroups.dayOfWeek, students.name as student, students.phone
  117. from sports
  118. join sportGroups
  119. on sports.id = sportGroups.sport_id
  120. join student_sport
  121. on sportGroups.id = student_sport.sportGroup_id
  122. join students
  123. on students.id = student_sport.student_id
  124. join coaches
  125. on coaches.id = sportGroups.coach_id
  126. and coaches.name = coachParam;
  127. END $
  128. DELIMITER ;
  129.  
  130. call firstTask('Ivan Todorov Petkov');
  131.  
  132.  
  133. -- 2. Създайте процедура, с която по подадено id на спорт се извеждат: името на спорта, имената на учениците,
  134. -- които тренират и имената на треньорите, които водят тренировките по този спорт.
  135. delimiter $
  136. DROP procedure if exists SecondTask $
  137. CREATE PROCEDURE SecondTask(IN idParam INT)
  138. begin
  139. SET @sportID = idParam;
  140. SELECT sports.id as sport_ID, sports.name as Sport, students.name as Student, coaches.name as Coach
  141. from students
  142. join student_sport
  143. on students.id = student_sport.student_id
  144. join sportGroups
  145. on sportGroups.id = student_sport.sportGroup_id
  146. join coaches
  147. on coaches.id = sportGroups.coach_id
  148. join sports
  149. on sports.id = sportGroups.sport_id
  150. and sports.id = @sportID;
  151. END $
  152. DELIMITER ;
  153.  
  154. CALL SecondTask(1);
  155.  
  156. -- 3. Създайте процедура, която по подадено име на студент и година извежда средната сума на платените от него такси.
  157. delimiter $
  158. DROP procedure if exists ThirdTask $
  159. CREATE PROCEDURE ThirdTask(IN studentName VARCHAR(255), yearParam INT)
  160. BEGIN
  161. SELECT students.name, taxesPayments.year, AVG(paymentAmount) as Average
  162. from taxesPayments
  163. join students
  164. on students.id = taxesPayments.student_id
  165. and students.name = studentName
  166. and taxesPayments.year = yearParam;
  167. END $
  168. DELIMITER ;
  169.  
  170. Call ThirdTask('Elena Petrova Petrova', 2022);
  171.  
  172. -- 4. Използвайте базата данни transaction_test. Създайте процедура
  173. -- за прехвърляне на пари от една сметка в друга. Нека процедурата
  174. -- да извежда съобщение за грешка ако няма достатъчно пари, за да
  175. -- се осъществи успешно трансакцията или ако трансакцията е
  176. -- неуспешна. За целта може да използвате функцията ROW_COUNT(),
  177. -- която връща броя на засегнатите редове след последната Update
  178. -- или Delete заявка. Процедурата да получава като параметри ID на
  179. -- сметката от която се прехвърля, ID на сметката на получателя и
  180. -- сумата, която трябва да се преведе.
  181.  
  182. delimiter $
  183. DROP procedure if exists thirdTask $
  184. create procedure thirdTask(IN IDsend int, IDreceive INT, amountParam INT)
  185. BEGIN
  186. START TRANSACTION;
  187. IF((SELECT ca.amount FROM customer_accounts AS ca WHERE ca.id = IDsend) < amountParam OR amountParam<0) THEN ROLLBACK;
  188.  
  189. ELSE
  190. UPDATE customer_accounts
  191. SET amount = amount - amountParam
  192. WHERE customer_accounts.id = IDsend;
  193. IF (ROW_COUNT() != 1) THEN ROLLBACK;
  194.  
  195. ELSE
  196. UPDATE customer_accounts
  197. SET amount = amount + amountParam
  198. WHERE customer_accounts.id = IDreceive;
  199. IF (ROW_COUNT() != 1) THEN ROLLBACK;
  200. END IF;
  201. END IF;
  202. END IF;
  203. IF (ROW_COUNT() != 1) THEN SELECT 'FAIL';
  204. END IF;
  205. COMMIT;
  206. END $
  207. DELIMITER ;
  208.  
  209.  
  210.  
  211. CALL thirdTask(1,2,541);
  212.  
  213. SELECT * FROM customer_accounts
  214. JOIN customers ON customers.id = customer_accounts.customer_id;
  215.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement