取出每组的前 n 条 记录, 来个高效的写法

drop function if exists fun_tests(bigint);
create or replace function fun_tests(bigint default 5)
  returns table(pid bigint,file_name text)
as $$
    declare
        v_len integer;
        v_parentids bigint[];
        v_rec record;
    begin
        v_parentids := (array[100000,100001])::bigint[];
        v_len := array_length(v_parentids, 1);
        for i in 1..v_len loop  
            /*写法1*/
            /*for pid,file_name in select parentid,fname 
                from attachs where parentid=v_parentids[i] order by objectid desc limit $1 loop
                return next;
            end loop;
            */

            /*写法2*/
            for v_rec in select parentid,fname 
                from attachs where parentid=v_parentids[i] order by objectid desc limit $1 loop
                pid:=v_rec.parentid;
                file_name:=v_rec.fname;
                return next;
            end loop;
        end loop;
    end;
$$ language plpgsql strict;

使用方法

select * from fun_tests();
select * from fun_tests(10);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kmblack1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值