如何在 Postgres 函数中进行条件查询

How to make a conditional query in Postgres function

我从 Postgress 开始,我需要用四个 id 作为参数进行查询,这些可以是 NULL,只有第一个是强制性的,所以我试图获得一个包含每个数据的数据列表ID。如何在 WHERE 条件下检查 id 参数是否为 NOT NULL。 我给你举个例子(没用)

CREATE OR REPLACE FUNCTION sp_lock(
    IN p_id_1 character varying, 
    IN p_id_2 character varying DEFAULT NULL, 
    IN p_id_3 character varying DEFAULT NULL, 
    IN p_id_4 character varying DEFAULT NULL)
RETURNS SETOF character varying AS
$BODY$
BEGIN 
    UPDATE stock
    SET lock = 1
    FROM  (
      SELECT s.id
      FROM  stock s
      WHERE
        (ls.id = p_id_1 or p_id_1 is null) OR
        (ls.id = p_id_2 or p_id_2 is null) OR
        (ls.id = p_id_3 or p_id_3 is null) OR
        (ls.id = p_id_4 or p_id_4 is null) AND
        ls.lock = 0
      FOR UPDATE OF s
    ) i
    WHERE i.id = stock.id;

这里我需要先检查参数是否为 NOT NULL,然后用 OR exp 连接到条件。

您可以在 where 条件

中使用 in operator
WHERE 
    s.id in (p_id_1, p_id_2, p_id_3, p_id_4) AND
    s.lock = 0;

顺便说一句,您不需要子查询:

UPDATE stock
SET lock = 1
WHERE
    id in (p_id_1, p_id_2, p_id_3, p_id_4) AND
    lock = 0;

完全相同但速度更快。