Sli*_*nTN 6 postgresql function
我的 postgresql 数据库中有一个函数,如果存在则更新行,如果不存在则插入新行:
CREATE OR REPLACE FUNCTION insert_or_update(val1 integer, val2 integer) RETURNS VOID AS $$
DECLARE
BEGIN
UPDATE my_table SET col2 = val2 WHERE col1 = val1;
IF NOT FOUND THEN
INSERT INTO my_table (col2) values ( val2 );
END IF;
END;
$$ LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
目前它工作完美,但我想获取id行(如果更新或插入)。
我该怎么做?
小智 4
您的函数被声明为returns void因此它不能返回任何内容。
假设col1是主键并且也定义为序列,您可以执行以下操作:
CREATE OR REPLACE FUNCTION insert_or_update(val1 integer, val2 integer)
RETURNS int
AS $$
DECLARE
l_id integer;
BEGIN
l_id := val1; -- initialize the local variable.
UPDATE my_table
SET col2 = val2
WHERE col1 = val1; -- !! IMPORTANT: this assumes col1 is unique !!
IF NOT FOUND THEN
INSERT INTO my_table (col2) values ( val2 )
RETURNING col1 -- this makes the generated value available
into l_id; -- and this stores it in the local variable
END IF;
return l_id; -- return whichever was used.
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
与您的功能相比,我改变了四件事:
returns integer以便能够返回一些东西insert值如果您想区分调用者的更新或插入,可以将 l_id 初始化为null。null在这种情况下,如果发生更新,该函数将返回,否则返回某个值。
| 归档时间: |
|
| 查看次数: |
7231 次 |
| 最近记录: |