1
我以Postgress开始,我需要以四个ID作为参数进行查询,这些可以是NULL,只有第一个是必需的,所以我试图获得一个包含每个id数据的数据列表。我如何检查id参数是否在WHERE条件内不为NULL。 我给你一个例子(没有工作)如何在Postgres函数中进行条件查询
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,然后拼接的条件,用或EXP。
这个查询究竟有什么问题? – Mureinik
我不确定如果p_id_3为空,会发生什么,例如,只能确保p_id_1总是会来。 –