PLsql эквивалентный запрос от PLpgsql - PullRequest
0 голосов
/ 07 февраля 2019

Я новичок в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...