我是mysql的新手,曾经在postgresql中工作。我一直在尝试使用plsql在mysql工作台中创建一个函数。我已经在plpgsql中编写了一个代码来描述我要做什么(基本上是在表中输入数据,避免了多余的输入)
我尝试搜索相关答案,并找到了从表中删除重复条目的方法。但是,我要做的是避免在表中重复输入数据。以下是可行的代码,但是如果更新查询成功运行,我不明白如何跳出循环,如果不能成功运行,则需要运行插入查询。我知道我可以在这里添加IF-then-ELSE。但要写些什么条件。
DELIMITER //
CREATE PROCEDURE merge_abc
(IN data CHAR(20))
BEGIN
LOOP
UPDATE abc SET node_name = data WHERE node_name = data;
END LOOP;
END //
DELIMITER ;
*目的是避免重复输入数据,而不是像这样最终删除重复输入;
CREATE FUNCTION merge_abc(data TEXT) RETURNS VOID AS
BEGIN
LOOP
-- first try to update the key
UPDATE abc SET node_name = data WHERE node_name = data;
IF found THEN
RETURN;
END IF;
-- not there, so try to insert the key
-- if someone else inserts the same key concurrently,
-- we could get a unique-key failure
BEGIN
INSERT INTO abc(node_name) VALUES (data);
RETURN;
EXCEPTION WHEN unique_violation THEN
-- Do nothing, and loop to try the UPDATE again.
END;
END LOOP;
END;