在PL/pgSQL函数中不执行任何操作的ON冲突的返回值 [英] Return value for ON CONFLICT DO NOTHING in PL/pgSQL function
本文介绍了在PL/pgSQL函数中不执行任何操作的ON冲突的返回值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
按照this评论的指示。
CREATE OR REPLACE FUNCTION test_upsert(
_parent_id int,
_some_text text)
RETURNS text
LANGUAGE plpgsql AS
$func$
DECLARE
a text;
BEGIN
INSERT INTO parent_tree (parent_id, some_text)
VALUES (_parent_id,_some_text)
ON CONFLICT DO NOTHING
RETURNING 'ok' into a;
return a;
IF NOT FOUND THEN return 'JUZ ISTNIEJE';
END IF;
END
$func$;
不确定这是什么意思:
IF NOT FOUND THEN return 'JUZ ISTNIEJE';
如果没有冲突,则返回
ok
,这是合理的。但当发生冲突时,它将产生NULL。是否可以同时让on conflict do nothing
同时返回not ok
,或者在发生冲突时只返回raise notice parent_id should be unique
?
推荐答案
我现在更新了my referenced answer以修复一个错误,该错误似乎是造成混淆的主要原因。
JUZ ISTNIEJE";是波兰语,意思是&已经存在&--这就是操作员想要返回的。唯一的问题是返回一个有意义的文本,而不是什么都不返回(
- 不确定
IF NOT FOUND THEN return 'JUZ ISTNIEJE';
是什么意思?
NULL
)--这似乎解决了您的下一个问题:
是的,这就是我那边的答案,现在它已经解决了。您的函数变为:
- 如果没有冲突,则返回
ok
,这是有意义的。但当发生冲突时,它将产生零。是否可以同时拥有on conflict do nothing
并返回not ok
,或者当发生冲突时,只返回raise notice parent_id should be unique
。
CREATE OR REPLACE FUNCTION test_upsert(_parent_id int, _some_text text)
RETURNS text
LANGUAGE plpgsql AS
$func$
BEGIN
INSERT INTO parent_tree (parent_id, some_text)
VALUES (_parent_id,_some_text)
ON CONFLICT DO NOTHING;
IF FOUND THEN
RETURN 'ok';
ELSE
RAISE NOTICE 'parent_id already exists: %', _parent_id; -- optional!
RETURN 'not ok'; -- or whatever
END IF;
END
$func$;
这篇关于在PL/pgSQL函数中不执行任何操作的ON冲突的返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文