пятница, 31 марта 2017 г.

Пример передачи в функцию 2-х коллекций и возврат 2-х курсоров


CREATE OR REPLACE FUNCTION study.test_collection_param(
                                                       INOUT refcur1    refcursor,
                                                       INOUT refcur2    refcursor,
                                                             in_coll_n  int[],
                                                             in_coll_s  varchar(50)[] default '{}'::varchar(50)[]
                                                      )
 RETURNS record
 LANGUAGE plpgsql
 STABLE SECURITY DEFINER
AS $function$
begin
open refcur1 for
         select d.id_dict,
                sum(1)   as cnt,
                sum(val) as val
           from study.dat d
          where d.id_dict = ANY(in_coll_n)
          group by d.id_dict;
    open refcur2 for
         select unnest(in_coll_s) as COL_NAME;
end;
$function$

commit;

begin;
 select study.test_collection_param('rc1','rc2',ARRAY[1,2,3],ARRAY['x1','y2',' ','z3']); 

FETCH ALL IN rc1;
1 17 916
2 17 921
3 17 905

FETCH ALL IN rc2;
COL_NAME
x1
y2

z3

Комментариев нет:

Отправить комментарий