Advertisement
medvedya

Untitled

Jan 30th, 2015
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 5.36 KB | None | 0 0
  1. DROP FUNCTION IF EXISTS bd_hospital.getCountIllnes;
  2. DELIMITER //
  3. CREATE FUNCTION bd_hospital.getCountIllness (illnes_name_p VARCHAR(50), startDate DATE, endDate DATE)
  4. RETURNS INT
  5. BEGIN
  6.     DECLARE current_d_id INT;
  7.     DECLARE current_i_id VARCHAR(50);
  8.     DECLARE COUNT INT;
  9.     DECLARE LENGTH INT;
  10.     DECLARE cur_close_date DATE;
  11.     DECLARE illnes_name_u VARCHAR(50);
  12.     DECLARE cur cursor FOR (SELECT illness_name AS current_i_id, id_diagnosis AS current_d_id  FROM bd_hospital.map_diagnosis_illness);
  13.     SET illnes_name_u = UPPER(illnes_name_p);
  14.     SET LENGTH = (SELECT COUNT(*) FROM bd_hospital.map_diagnosis_illness);
  15.     SET COUNT = 0;
  16.     OPEN cur;
  17.     loop_label:  LOOP
  18.     fetch cur INTO current_i_id ,current_d_id ;
  19.     IF current_i_id = illnes_name_u THEN
  20.         SET cur_close_date = (SELECT close_date FROM bd_hospital.diagnosis  WHERE current_d_id = diagnosis.id);
  21.         IF
  22.         startDate < (SELECT open_date FROM bd_hospital.diagnosis WHERE current_d_id = diagnosis.id)
  23.         AND
  24.         (cur_close_date IS NULL OR endDate > cur_close_date)
  25.         THEN
  26.             SET COUNT =  COUNT + 1;
  27.         END IF;
  28.     END IF;
  29.     SET LENGTH = LENGTH - 1;
  30.     IF LENGTH = 0 THEN close cur; RETURN COUNT; END IF;
  31.     END LOOP;            
  32.     RETURN 0;
  33. END//
  34.  
  35. DROP PROCEDURE IF EXISTS bd_hospital.add_patientByName;
  36. DELIMITER //
  37. CREATE PROCEDURE bd_hospital.add_patientByName (IN _name VARCHAR(256))
  38. BEGIN
  39. DECLARE last_id INT;
  40. INSERT person (name) VALUES (_name);
  41. SET last_id = (SELECT LAST_INSERT_ID());
  42. INSERT patient(id_person) VALUES(last_id);
  43. END//
  44.  
  45. CREATE PROCEDURE bd_hospital.add_doctorByName (IN _name VARCHAR(256))
  46. BEGIN
  47. DECLARE last_id INT;
  48. INSERT person (name) VALUES (_name);
  49. SET last_id = (SELECT LAST_INSERT_ID() );
  50. INSERT bd_hospital.doctor(id_person) VALUES(last_id);
  51. END//
  52.  
  53.  
  54.  
  55. DROP FUNCTION IF EXISTS bd_hospital.checkValidPatient;
  56. DELIMITER //
  57. CREATE FUNCTION bd_hospital.checkValidPatient(id_person_p INT)
  58. RETURNS bool
  59. BEGIN
  60. DECLARE c INT;
  61. SET c = (SELECT COUNT(*) FROM bd_hospital.doctor WHERE doctor.id_person = id_person_p);
  62. IF c = 0 THEN
  63. RETURN TRUE;
  64. END IF;
  65. RETURN FALSE;
  66. END//
  67.  
  68. DROP FUNCTION IF EXISTS bd_hospital.checkValidDoctor;
  69. DELIMITER //
  70. CREATE FUNCTION bd_hospital.checkValidDoctor(id_person_doc INT)
  71. RETURNS bool
  72. BEGIN
  73. DECLARE c INT;
  74. SET c = (SELECT COUNT(*) FROM bd_hospital.patient WHERE .patient.id_person = id_person_doc);
  75. IF c = 0 THEN
  76. RETURN TRUE;
  77. END IF;
  78. RETURN FALSE;
  79. END//
  80.  
  81.  
  82. DROP TRIGGER IF EXISTS bd_hospital.onInsertDoctor;
  83. DELIMITER //
  84.  
  85. CREATE TRIGGER bd_hospital.onInsertDoctor BEFORE INSERT ON bd_hospital.doctor FOR EACH ROW
  86. BEGIN
  87. DECLARE new_id INT;
  88. SET new_id = NEW.id_person;
  89. IF NOT(checkValidDoctor(new_id)) THEN
  90.    SIGNAL SQLSTATE '45000'
  91.       SET MESSAGE_TEXT = 'You can not add this doctor becouse it is a pacient';
  92. END IF;
  93. END//
  94.  
  95. DROP TRIGGER IF EXISTS bd_hospital.onUpdateDoctor;
  96. DELIMITER //
  97.  
  98. CREATE TRIGGER bd_hospital.onUpdateDoctor BEFORE UPDATE ON bd_hospital.doctor FOR EACH ROW
  99. BEGIN
  100. DECLARE new_id INT;
  101. SET new_id = NEW.id_person;
  102. IF NOT(checkValidDoctor(new_id)) THEN
  103.    SIGNAL SQLSTATE '45000'
  104.       SET MESSAGE_TEXT = 'You can not add this doctor becouse it is a pacient';
  105. END IF;
  106. END//
  107.  
  108. DROP TRIGGER IF EXISTS bd_hospital.onInsertPatient;
  109. DELIMITER //
  110.  
  111. CREATE TRIGGER bd_hospital.onInsertPatient BEFORE INSERT ON bd_hospital.patient FOR EACH ROW
  112. BEGIN
  113. DECLARE new_id INT;
  114. SET new_id = NEW.id_person;
  115. IF NOT(checkValidPatient(new_id)) THEN
  116.    SIGNAL SQLSTATE '45000'
  117.       SET MESSAGE_TEXT = 'You can not add this patient becouse it is a doctor';
  118. END IF;
  119. END//
  120.  
  121.  
  122. DROP TRIGGER IF EXISTS bd_hospital.onUpdatePatient;
  123. DELIMITER //
  124. CREATE TRIGGER bd_hospital.onUpdatePatient BEFORE UPDATE ON bd_hospital.patient FOR EACH ROW
  125. BEGIN
  126. DECLARE new_id INT;
  127. SET new_id = NEW.id_person;
  128. IF NOT(checkValidPatient(new_id)) THEN
  129.    SIGNAL SQLSTATE '45000'
  130.       SET MESSAGE_TEXT = 'You can not set this patient becouse it is a doctor';
  131. END IF;
  132. END//
  133.  
  134. DROP PROCEDURE IF EXISTS bd_hospital.get_doctor_congestion;
  135. DELIMITER //
  136. CREATE PROCEDURE bd_hospital.get_doctor_congestion()
  137. BEGIN
  138. DECLARE LENGTH INT;
  139. DECLARE doc_id INT;
  140. DECLARE doc_c INT;
  141. DECLARE doc_n VARCHAR(50);
  142. DECLARE cur cursor FOR (SELECT id AS doc_id  FROM bd_hospital.doctor);
  143. CREATE TEMPORARY TABLE IF NOT EXISTS bd_hospital.doctor_congestion (
  144.     doctor_name VARCHAR(256),
  145.     COUNT INT
  146. );
  147. TRUNCATE TABLE bd_hospital.doctor_congestion;
  148. SET LENGTH = (SELECT COUNT(*) FROM bd_hospital.doctor);
  149. OPEN cur;
  150. loop_label:  LOOP
  151.     fetch cur INTO doc_id;
  152.     SET doc_c = 0;
  153.     SET doc_c = doc_c + (SELECT COUNT(*) FROM bd_hospital.patient WHERE patient.id_doctor = doc_id);
  154.     SET doc_n = (SELECT name FROM person JOIN doctor ON(doctor.id_person = person.id AND doctor.id = doc_id));
  155.     INSERT bd_hospital.doctor_congestion(doctor_name, COUNT) VALUES (doc_n,doc_c);
  156.     SET LENGTH = LENGTH - 1;
  157.     IF LENGTH = 0 THEN close cur; leave loop_label;  END IF;
  158.     END LOOP;    
  159. SELECT * FROM bd_hospital.doctor_congestion ORDER BY bd_hospital.doctor_congestion.COUNT DESC;
  160. END//
  161.  
  162.  
  163. DROP TRIGGER IF EXISTS bd_hospital.onAddIll;
  164. DELIMITER //
  165. CREATE TRIGGER bd_hospital.onAddIll BEFORE UPDATE ON bd_hospital.illness FOR EACH ROW
  166. BEGIN
  167.     SET NEW.name = UPPER(NEW.name);
  168. END//
  169.  
  170. DROP TRIGGER IF EXISTS bd_hospital.onUpdateIll;
  171. DELIMITER //
  172. CREATE TRIGGER bd_hospital.onUpdateIll BEFORE INSERT ON bd_hospital.illness FOR EACH ROW
  173. BEGIN
  174.     SET NEW.name = UPPER(NEW.name);
  175. END//
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement