我能够在SQL中执行以下操作,其中user_ids的“数组”被传递到SQL查询的where
子句中。
select * from users where id in (select user_id from profiles);
我想做同样的事情,但将“数组”传递给PostgreSQL(PL / pgSQL)函数,如下所示。如何声明函数并使用函数中的“数组”?
select * from users_function(select user_id from profiles);
CREATE OR REPLACE FUNCTION users_function(....)
RETURNS void AS
$BODY$
....
答案 0 :(得分:2)
在函数中声明数组数据类型[]
,然后使用聚合函数array_agg
将select语句转换为数组。
CREATE OR REPLACE FUNCTION users_function(myints integer[])
$$
BEGIN
-- you need to find the bounds with array_lower and array_upper
FOR i in array_lower(myints, 1) .. array_upper(myints, 1) LOOP
Raise Notice '%', myints[i]::integer;
END LOOP;
END;
$$
select * from users_function(array_agg((select user_id from profiles)));
答案 1 :(得分:0)
如上所述,我无法获得nate c的array_agg
方法。这是一个选项:
select * from test_array('{1,2}');
CREATE OR REPLACE FUNCTION test_array(user_ids integer[])
RETURNS void AS
$$
declare
begin
FOR i in array_lower(user_ids, 1) .. array_upper(user_ids, 1) LOOP
RAISE NOTICE '%', user_ids[i]::integer;
END LOOP;
end
$$
LANGUAGE plpgsql;