PostgreSQL 两个示例轻松搞定存储过程游标

测试用表

drop table if exists test;
create table test (
    id bigserial primary key,
    name varchar(20),
    age int
);

delete from test;
insert into test(name, age) 
values (张三, 1),
(李四, 2),
(王五, 3),
(李四, 4),
(王五, 5);

示例1:

create or replace function test1 (userName varchar(20)) returns int as
 $$
declare
    u record;
    sumAge int := 0;
    -- 声明游标
    curs cursor for select name,age from test where name = userName;
begin
   -- 循环读取游标数据
   for u in curs loop 
        sumAge = sumAge + u.age;
   end loop;
   return sumAge;
end
$$
language plpgsql;

示例2

create or replace function test1 (userName varchar(20)) returns int as
 $$
declare
    uName varchar(20);
    uAge int;
    sumAge int := 0;
    -- 声明游标 
    curs cursor for select name,age from test where name = userName;
begin
   -- 打开游标
   open curs;
   -- 循环读取游标数据
   loop
        -- 使用游标
        fetch curs into uName,uAge;
        exit when not found;
        sumAge = sumAge + uAge;
   end loop;
   -- 关闭游标
  close curs;
  return sumAge;
end
$$
language plpgsql;

测试

select test1(王五)
经验分享 程序员 微信小程序 职场和发展