Мой MySQL довольно ограничен, и я много искал, но хочу подтвердить, что я до сих пор делал.
Я пытаюсь написать хранимую процедуру в MySQL, которая принимает5 параметров.4 параметра будут содержать значения для столбцов, которые будут использоваться для обновления, и 5-е значение, которое будет использоваться для выбора строк для обновления.
имена параметров: p_name1, p_name2, p_name3, p_name4, p_parentId имена столбцов:NAME_1, NAME_2, NAME_3, NAME_4, PARENT_ID
Если для p_name1 задано значение, обновите столбец NAME_1 значением параметра, где PARENT_ID для этой строки = p_parentId AND p_name1 не равно нулю.Сделайте это для всех столбцов.В некоторых случаях может потребоваться обновление только пары столбцов, поэтому для других столбцов ничего не передается.Это то, что я придумал до сих пор:
BEGIN
UPDATE `NAMES_TABLE` SET `NAME_1` = p_name1 WHERE `PARENT_ID` = p_parentId AND p_name1 IS NOT NULL;
UPDATE `NAMES_TABLE` SET `NAME_2` = p_name2 WHERE `PARENT_ID` = p_parentId AND p_name2 IS NOT NULL;
UPDATE `NAMES_TABLE` SET `NAME_3` = p_name3 WHERE `PARENT_ID` = p_parentId AND p_name3 IS NOT NULL;
UPDATE `NAMES_TABLE` SET `NAME_4` = p_name4 WHERE `PARENT_ID` = p_parentId AND p_name4 IS NOT NULL;
END
Однако будут также случаи, когда для столбца нужно будет установить значение NULL.Может быть, для этого я могу использовать какой-то оператор If для обновлений, который говорит, что для параметра задано ключевое слово (т. Е. "Null" в качестве текста), для столбца устанавливается значение null, в противном случае, если параметр IS NOT NULL обновляется со значением параметра, иначе donне обновлять столбец вообще.
Есть ли способ сделать это?Может быть, с оператором if или case в обновлении?
Спасибо за любую помощь, вы можете мне помочь.
ПРИМЕР:
Исходная таблица со значениями
+------+-----------+-----------+-----------+----------+--------+
| ID | PARENT_ID| NAME_1 | NAME_2 | NAME_3 | NAME_4 |
+------+-----------+-----------+-----------+----------+--------+
| 1 | NULL | APRIL | AMBER | ALFRED | ALEX |
| 2 | 1 | BOB | BILL | BURT | BELINDA|
| 3 | 1 | BOB | BILL | BURT | BELINDA|
| 4 | NULL | CHARLES | CASPER | CONNOR | CARL |
+------+-----------+-----------+-----------+----------+--------+
передать параметры:
p_name1 = JAMES, p_name2 = null, p_name3 = JEN, p_name4 = "null", p_parentId = 1
Результат:
+------+-----------+-----------+-----------+----------+--------+
| ID | PARENT_ID| NAME_1 | NAME_2 | NAME_3 | NAME_4 |
+------+-----------+-----------+-----------+----------+--------+
| 1 | NULL | APRIL | AMBER | ALFRED | ALEX |
| 2 | 1 | JAMES | BILL | JEN | null |
| 3 | 1 | JAMES | BILL | JEN | null |
| 4 | NULL | CHARLES | CASPER | CONNOR | CARL |
+------+-----------+-----------+-----------+----------+--------+