利用游标实现数据库一对多关系的字符串拼接

先说一下目标效果
源数据表
||
\/
目标效果视图
利用数据库视图和游标实现此效果

drop view view_pmapproval_configuration; -- 删除已存在的视图
create view view_pmapproval_configuration AS
	select DISTINCT sys_project.prj_name, get_ongoing_phase(pmapproval_configuration.prj_code) as '所处阶段' from sys_project join pmapproval_configuration 
		where sys_project.prj_code = pmapproval_configuration.prj_code;

get_ongoing_phase函数

create function get_ongoing_phase( prjcode varchar(50) ) returns varchar(500)
begin 
  declare done int default 0;
	declare phasename varchar(500);
	declare temp varchar(50);
	declare phase_cursor cursor for select phase_name from pmapproval_configuration where prj_code = prjcode and phase_state = '1';
	declare continue handler for sqlstate '02000' set done = 1;
	set phasename = '';
 	open phase_cursor; --开启游标
 	fetch next from phase_cursor into temp; --从游标中取出数据,数据可以是一个或多个
  	repeat --循环
    	set phasename = concat(phasename,temp,',');
    	fetch next from phase_cursor into temp;
  	until done end repeat;
 	close phase_cursor; --关闭游标

  set phasename = substring(phasename,1,char_length(phasename)-1); -- 去掉最后一个逗号
	return phasename;
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值