游标介绍:
游标是一种从表中检索数据并进行操作的灵活手段,游标主要用在服务器上,处理由客户端发送给服务端的sql语句,或是批处理、存储过程、触发器中的数据处理请求。
游标的一个常见用途就是保存查询结果,以便以后使用。
游标使用顺序:
声明游标 > 打开游标 > 使用游标 > 关闭游标 。
使用游标的案例:
使用游标,把表中的类型查询出来放到游标中,循环游标的内容,更新表
CREATE OR REPLACE PROCEDURE public.proc_dev_update_ranking(i_startdate text, i_enddate text, INOUT o_errcode text DEFAULT NULL::text, INOUT o_errmsg text DEFAULT NULL::text)
LANGUAGE plpgsql
AS $procedure$
DECLARE
-- 定义变量,用来存储从游标中获取到的值
kind_name_1 varchar;
--声明游标
-- 把fof_fund_performance_ranking表中的kind去重后的结果集存放到游标中
cur cursor for
SELECT DISTINCT kind FROM fof_fund_performance_ranking;
begin
-- 打开游标 第一条记录
open cur;
-- 循环开始
loop
--获取游标中的当前行信息
fetch next from cur into kind_name_1;
exit when not found;
--更新排名
update fof_fund_performance_ranking aa
set ranking =ranking_1
from
( select *,row_number() over(partition by trd_dt,period,kind order by kind_value DESC) ranking_1
from fof_fund_performance_ranking
where kind =kind_name_1
) as bb
where aa.trd_dt =bb.trd_dt and aa.period=bb.period and aa.kind =bb.kind and aa.scr_id =bb.scr_id;
-- 结束循环
end loop;
--关闭游标
close cur;
END;
$procedure$
;