我有一个函数,我传入一个多维数组以在WHERE子句中使用。我想我可能不得不使用FOR LOOP但不确定。
如何在查询中访问传入的参数?
CREATE OR REPLACE FUNCTION public.select_locations(coordinates TEXT[][])
RETURNS SETOF public.locations AS
$BODY$
DECLARE item public.locations;
BEGIN
select * INTO item from public.locations where latitude, longitude NOT IN coordinates;
RETURN item;
END
$BODY$
LANGUAGE PLPGSQL VOLATILE
COST 100;
测试电话:
select * from
public.select_locations
(Array[array['42.449630','-123.758012'],array['42.456591','-123.844708']]);
答案 0 :(得分:0)
要返回不在坐标arg中的位置的每一行(如果我理解你想要的东西),你可以执行以下操作:
CREATE OR REPLACE FUNCTION public.select_locations(coordinates TEXT[][])
RETURNS SETOF public.locations AS
$BODY$
DECLARE item public.locations;
BEGIN
for item in select * from public.locations where array[latitude,longitude] not in (SELECT array[coordinates[i][1], coordinates[i][2]] FROM
generate_series(array_lower(coordinates,1),array_upper(coordinates,1)) i) loop
return next item;
end loop;
return;
END
$BODY$
LANGUAGE PLPGSQL VOLATILE
COST 100;
表格位置的纬度和经度为文本类型列。 PostgreSQL版本9.1。