例如:如果我已经将1,2,3参数发送到带有idxyz的存储过程,那么表有1,2,3,4,5个ID,那么应该从表中删除4,5。
CREATE OR REPLACE FUNCTION example_array_input(INT[]) RETURNS SETOF ids AS
$BODY$
DECLARE
in_clause ALIAS FOR $1;
clause TEXT;
rec RECORD;
BEGIN
FOR rec IN SELECT id FROM ids WHERE id = ANY(in_clause)
LOOP
RETURN NEXT rec;
END LOOP;
-- final return
RETURN;
END
$BODY$ language plpgsql;
ex: SELECT * FROM example_array_input('{1,2,4,5,6}'::INT[]);
如果现有表有1,2,3,4,5,6,7,8,9。然后它应该从该表中删除7,8,9,因为它们不在输入数组中
您可以使用这样的DELETE
语句来达到您的目的。
DELETE FROM ids
where id NOT IN ( select UNNEST('{1,2,4,5,6}'::INT[]) ) ;
您可以使用返回已删除的ID的sql函数:
CREATE OR REPLACE FUNCTION example_array_input(in_clause INT[]) RETURNS SETOF ids
language sql
AS
$SQL$
DELETE
FROM ids
WHERE id NOT IN ( SELECT unnest(in_clause) )
RETURNING id;
$SQL$;
您可以在http://rextester.com/PFG55537中看到一个正在运行的示例
在1到10个表中运行
SELECT * FROM example_array_input('{1,2,4,5,6}'::INT[]);