【发布时间】:2019-09-26 15:39:52
【问题描述】:
我的 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 使用参数值更新,否则不要'根本不更新列。
有没有办法做到这一点?也许在更新中带有 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 |
+------+-----------+-----------+-----------+----------+--------+
【问题讨论】:
-
@GordonLinoff 更新了原帖
标签: mysql sql stored-procedures