Я новичок в mysql и раньше работал в postgresql.Я пытался сделать функцию в MySQL Workbench с помощью plsql.Я написал код в 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;