如何将SQL查询的数组输出传递给PostgreSQL(PL / pgSQL)函数?

时间:2011-02-14 19:45:12

标签: sql postgresql select plpgsql

我能够在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$
....

2 个答案:

答案 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;