gpt4 book ai didi

postgresql - 在 PostgreSQL 中使用 refcursor 返回多个记录集

转载 作者:行者123 更新时间:2023-11-29 12:16:32 29 4
gpt4 key购买 nike

-- FUNCTION: public.asyncmultiplerecs()

-- DROP FUNCTION public.asyncmultiplerecs();

CREATE OR REPLACE FUNCTION public.asyncmultiplerecs()
RETURNS SETOF refcursor
LANGUAGE 'plpgsql'
COST 100.0
AS $function$
DECLARE
ref1 refcursor; -- Declare cursor variables
ref2 refcursor;
ref3 refcursor;
ref4 refcursor;
BEGIN
OPEN ref1 FOR SELECT bk_channel_id,promotion_id FROM cs_promotion_offer_exclusions;
RETURN NEXT ref1;

OPEN ref2 FOR SELECT mastergroup,promo_grp_id FROM cs_promotion_group_master;
RETURN NEXT ref2;

OPEN ref3 FOR SELECT promotion_usoc,promotion_duration FROM cs_promotion_target_details;
RETURN NEXT ref2;

OPEN ref4 FOR SELECT promotion_id,offer_id FROM cs_promotion_details;
RETURN NEXT ref4;
END;
$function$;

上面是我的函数,我想执行上面函数中的所有记录集。

最佳答案

你得到所有的游标

SELECT * FROM asyncmultiplerecs();

然后使用 FETCH 从游标中获取结果。

您忘记为游标指定名称,因此它们将未命名。

这是一个完整的例子:

CREATE FUNCTION asyncmultiplerecs() RETURNS SETOF refcursor
LANGUAGE plpgsql AS
$$DECLARE
ref1 refcursor;
BEGIN
ref1 := 'c1';
OPEN ref1 FOR VALUES (1), (2);
RETURN NEXT ref1;

ref1 := 'c2';
OPEN ref1 FOR VALUES (3), (4);
RETURN NEXT ref1;
END;$$;

现在您必须在事务中调用该函数,因为游标将在提交时关闭:

BEGIN;

SELECT * FROM asyncmultiplerecs();
asyncmultiplerecs
-------------------
c1
c2
(2 rows)

FETCH ALL FROM c1;
column1
---------
1
2
(2 rows)

FETCH ALL FROM c2;
column1
---------
3
4
(2 rows)

COMMIT;

关于postgresql - 在 PostgreSQL 中使用 refcursor 返回多个记录集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51139163/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com