存储过程:新增或更新数据

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
CREATE DEFINER=`root`@`%` PROCEDURE `database`.`UpdateOrInsertReviseHistory`(
IN p_file_number VARCHAR(255),
IN p_version_id VARCHAR(255),
IN p_effect_date DATETIME,
IN p_revise_content TEXT
)
BEGIN
-- 检查记录是否存在
IF EXISTS (SELECT 1 FROM revise_history WHERE file_number = p_file_number AND version_id = p_version_id) THEN
-- 如果存在则更新
IF p_revise_content IS NOT NULL AND p_revise_content != '' THEN
-- 如果 revise_content 不为空,更新 revise_content 和 effect_date
UPDATE revise_history
SET effect_date = p_effect_date,
revise_content = p_revise_content
WHERE file_number = p_file_number AND version_id = p_version_id;
ELSE
-- 如果 revise_content 为空,仅更新 effect_date
UPDATE revise_history
SET effect_date = p_effect_date
WHERE file_number = p_file_number AND version_id = p_version_id;
END IF;
ELSE
-- 如果不存在则插入
IF p_revise_content IS NOT NULL AND p_revise_content != '' THEN
-- 如果 revise_content 不为空,插入 revise_content 和 effect_date
INSERT INTO revise_history (file_number, revise_content, version_id, effect_date, is_write)
VALUES (p_file_number, p_revise_content, p_version_id, p_effect_date, '1');
ELSE
-- 如果 revise_content 为空,仅插入 effect_date
INSERT INTO revise_history (file_number, version_id, effect_date, is_write)
VALUES (p_file_number, p_version_id, p_effect_date, '1');
END IF;
END IF;
END