使用动态sql返回多个结果(postgresql 8.2)

时间:2013-10-29 15:52:00

标签: function postgresql dynamic-sql

我想循环遍历模式并获得如下所示的结果集:

Count
5
834
345
34
984

但是,我无法使用动态sql返回任何内容...我已经尝试了所有内容,但8.2是一个真正的痛苦。无论我提出什么样的返回类型,我都会收到此错误:

ERROR: ERROR: RETURN cannot have a parameter in function returning
set

这是我的功能:

CREATE OR REPLACE FUNCTION dwh.adam_test4()
 RETURNS void
 LANGUAGE plpgsql
AS $function$
DECLARE
   myschema text;
   rec RECORD;  
BEGIN 

FOR myschema IN select distinct c.table_schema, d.p_id
from information_schema.tables t inner join information_schema.columns c 
  on (t.table_schema = t.table_schema and t.table_name = c.table_name) 
  join dwh.sgmt_clients d on  c.table_schema  = lower(d.userid)
where c.table_name = 'fact_members' and c.column_name = 'debit_card'
  and t.table_schema NOT LIKE 'pg_%'
  and t.table_schema NOT IN ('information_schema', 'ad_delivery', 'dwh', 'users', 'wand', 'ttd') 
order by table_schema

LOOP
    EXECUTE 'select count(ucic) from '|| myschema || '.' ||'fact_members where debit_card = ''yes''' into rec;
    RETURN rec;
END LOOP;
END
$function$

1 个答案:

答案 0 :(得分:3)

也许我误解了这个问题,但是你不应该告诉Postgres你想在返回记录时返回记录吗?

在底部你有:

RETURN rec;

在函数定义中,您说:

RETURNS void

除此之外,你返回1个结果(返回结束函数),所以它不会返回任何超出第一个元素的东西。

我猜你需要这样的东西:

RETURNS SETOF record

而不是RETURN rec,你需要:

RETURN NEXT rec

由于您想要返回一个整数,因此不确定您是否真的想要或需要RECORD返回。