我在 postgres 中编写了一个存储过程,我需要检查是否存在一行,然后采取相应的行动。沿线的东西。
IF SELECT * FROM foo WHERE x = 'abc' AND y = 'xyz' THEN
-- do something here
ELSE
-- do something else
END;
我用谷歌搜索了一下,但没有得到好的结果。
我在 postgres 中编写了一个存储过程,我需要检查是否存在一行,然后采取相应的行动。沿线的东西。
IF SELECT * FROM foo WHERE x = 'abc' AND y = 'xyz' THEN
-- do something here
ELSE
-- do something else
END;
我用谷歌搜索了一下,但没有得到好的结果。
PERFORM * FROM foo WHERE x = 'abc' AND y = 'xyz';
IF FOUND THEN
....
END IF;
如果返回一行或多行,这将成功。如果您想将结果限制为恰好一行,则用于GET DIAGNOSTICS
获取行数,或用于SELECT INTO
将行存储count(...)
到DECLARE
d 变量中,然后进行测试。如果没有结果是错误的,请使用SELECT INTO STRICT
要求仅获取一行并将其存储到目标变量中。
做这样的事情时要小心并发问题。如果您尝试编写 upsert/merge 函数,这种方法将不起作用。请参阅“为什么 upsert 如此复杂”。