-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMySQL-StoreProcedures-things.txt
More file actions
209 lines (128 loc) · 6.26 KB
/
Copy pathMySQL-StoreProcedures-things.txt
File metadata and controls
209 lines (128 loc) · 6.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
* If we are using 'IF & ELSEIF', then make sure there should be no space B/W ELSE & IF.
* Always place ';' after 'END IF'
*
* Deleting multiple records using IN clause ------------------------------------------------------------
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_user_allergies_upsert` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_user_allergies_upsert`(IN IN_user_id INT, IN IN_relative_id INT,IN IN_commaSeparatedAllergy_ids VARCHAR(2000))
BEGIN
set @sql = concat("DELETE FROM ehr_allergy WHERE user_id = ",IN_user_id," AND relative_id = ",IN_relative_id," AND allergy_id IN ('", replace(IN_commaSeparatedAllergy_ids,",","','"), "')");
PREPARE q FROM @sql;
execute q;
COMMIT;
END $$
DELIMITER ;
*******************************************************************************************************
* IF condition ----------------------------------------------------------------------------
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_user_file_upsert` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_user_file_upsert`(IN IN_user_id INT, IN IN_relative_id INT, IN IN_file_id INT,IN IN_file_type_id INT, IN IN_photo BLOB)
BEGIN
IF (IN_file_id = 0) THEN
UPDATE ehr_file SET relative_id = IN_relative_id, file_type_id = IN_file_type_id, file_blob =IN_photo, updated_at=now()
WHERE file_id = IN_file_id;
ELSE
INSERT INTO ehr_file (user_id, relative_id, file_type_id, file_blob, created_by, updated_by, file_date, upload_date,
created_at, updated_at)
VALUES (IN_user_id, IN_relative_id, IN_file_type_id,IN_photo,IN_user_id, IN_user_id, now(), now(), now(), now());
END IF;
COMMIT;
END $$
DELIMITER ;
*******************************************************************************************************
* Temparary variable with IF & ELSEIF in Sp -----------------------------------------------------------
DELIMITER $$
DROP PROCEDURE IF EXISTS `homeotel`.`sp_user_medical_history_upsert` $$
CREATE PROCEDURE `homeotel`.`sp_user_medical_history_upsert` (IN IN_medical_history_name VARCHAR(255), IN IN_user_id INT,
IN IN_relative_id INT, IN IN_commaSeparatedAllergy_ids VARCHAR(2000),
IN IN_commaSeparatedAllergyObject VARCHAR(2000))
BEGIN
DECLARE Var_table_name VARCHAR(30);
DECLARE Var_id_field_name VARCHAR(30);
DECLARE exit handler for sqlexception
BEGIN
GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
SELECT @p1 as error_code , @p2 as error;
ROLLBACK;
END;
DECLARE exit handler for sqlwarning
BEGIN
GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
SELECT @p1 as error_code , @p2 as error;
ROLLBACK;
END;
START TRANSACTION;
IF(IN_medical_history_name = 'allergies') THEN
SET Var_table_name = 'ehr_allergy';
SET Var_id_field_name = 'allergy_id';
ELSEIF(IN_medical_history_name = 'currentMedication') THEN
SET Var_table_name = 'ehr_current_medication';
SET Var_id_field_name = 'medication_id';
ELSEIF(IN_medical_history_name = 'postMedication') THEN
SET Var_table_name = 'ehr_post_medication';
SET Var_id_field_name = 'medication_id';
ELSEIF(IN_medical_history_name = 'surgeries') THEN
SET Var_table_name = 'ehr_surgery';
SET Var_id_field_name = 'surgery_id';
ELSEIF(IN_medical_history_name = 'injuries') THEN
SET Var_table_name = 'ehr_injury';
SET Var_id_field_name = 'injury_id';
ELSEIF(IN_medical_history_name = 'chronics') THEN
SET Var_table_name = 'ehr_chronic';
SET Var_id_field_name = 'disease_id';
END IF;
set @sql = concat("DELETE FROM ",Var_table_name,"
WHERE user_id = ",IN_user_id," AND relative_id = ",IN_relative_id);
PREPARE q FROM @sql;
execute q;
SET @save_allergies_query = CONCAT("INSERT INTO ",Var_table_name,"
(user_id, relative_id, ",Var_id_field_name,", created_by, updated_by,created_at, updated_at)
VALUES ",replace(IN_commaSeparatedAllergyObject,"timestamp",now()));
PREPARE save_allergies_query FROM @save_allergies_query;
EXECUTE save_allergies_query;
COMMIT;
END $$
DELIMITER ;
*******************************************************************************************************
* Temparary variable dynamic storage with IF & ELSEIF in Sp -------------------------------------------
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_user_lifestyle_upsert` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_user_lifestyle_upsert`(IN IN_user_id INT, IN IN_relative_id INT,
IN IN_smoking_id INT, IN IN_alcohol_id INT, IN IN_excercise_id INT, IN IN_activity_level_id INT,
IN IN_profession_id INT, IN IN_food_id INT, IN IN_heat_id INT)
BEGIN
DECLARE lifestyleCount INT;
DECLARE exit handler for sqlexception
BEGIN
GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
SELECT @p1 as error_code , @p2 as error;
ROLLBACK;
END;
DECLARE exit handler for sqlwarning
BEGIN
GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
SELECT @p1 as error_code , @p2 as error;
ROLLBACK;
END;
START TRANSACTION;
SET lifestyleCount = (SELECT COUNT(*) FROM ehr_lifestyle WHERE user_id = IN_user_id AND relative_id = IN_relative_id);
IF (lifestyleCount > 0) THEN
UPDATE ehr_lifestyle SET smoking_id = IN_smoking_id, alcohol_id = IN_alcohol_id, excercise_id = IN_excercise_id,
activity_level_id = IN_activity_level_id, profession_id = IN_profession_id, food_id = IN_food_id,
heat_id = IN_heat_id, updated_at=now()
WHERE user_id = IN_user_id AND relative_id = IN_relative_id;
ELSE
INSERT INTO ehr_lifestyle (user_id, relative_id, smoking_id, alcohol_id, excercise_id, activity_level_id, profession_id,
food_id, heat_id, created_by, updated_by, created_at, updated_at)
VALUES (IN_user_id, IN_relative_id, IN_smoking_id,IN_alcohol_id,IN_excercise_id, IN_activity_level_id,
IN_profession_id, IN_food_id, IN_heat_id, user_id, user_id, now(), now());
END IF;
COMMIT;
END $$
DELIMITER ;
*******************************************************************************************************
*