Roc*_*nja 4 postgresql insert concurrency plpgsql postgresql-9.3
我想构建一个函数,如果表中不存在电子邮件值并返回email_id行的值,则该函数将插入电子邮件。我怎样才能做到这一点?
另外,如果电子邮件没有插入并且它已经存在于数据库中,我该如何返回 ID?我需要执行另一个SELECT吗?
BEGIN;
LOCK TABLE mailing_list IN SHARE ROW EXCLUSIVE MODE;
INSERT INTO mailing_list (email)
SELECT 'email'
WHERE NOT EXISTS (
SELECT * FROM mailing_list WHERE email='email'
);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
我试过添加,returning id但它不起作用。我有:
查询没有结果数据的目的地
您需要将要返回的值存储在某处:
CREATE OR REPLACE FUNCTION f_get(ikey text)
returns integer
AS
$func$
DECLARE
l_id integer;
BEGIN
LOCK TABLE foo IN SHARE ROW EXCLUSIVE MODE;
INSERT INTO foo (type)
SELECT ikey
WHERE NOT EXISTS (
SELECT * FROM foo WHERE type=ikey
)
returning id into l_id; --< store the returned ID in local variable
return l_id; --< return this variable
END
$func$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
您也可以使用原始函数和OUT参数完成此操作。在这种情况下,您只需要使用returning id into out_key;
| 归档时间: |
|
| 查看次数: |
25539 次 |
| 最近记录: |