来自PLpgsql的PLsql等效查询

时间:2019-02-07 00:59:31

标签: mysql postgresql plsql mysql-workbench plsqldeveloper

我是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;

0 个答案:

没有答案