mysql 存储过程求助

2019-04-05 21:28:56 +08:00
 ladypxy
delimiter //
create procedure fix_position()
begin
	declare t mediumint(8);
	declare b mediumint(8);
	declare c mediumint(8);
	DECLARE thread_id CURSOR FOR select tid from pre_forum_thread;
	open threadid;
		myloop: LOOP
		fetch thread_id into t;
		SELECT count(*) into b FROM pre_forum_post WHERE tid=t;
		set c= b - 1;
		UPDATE pre_forum_thread SET replies= c WHERE tid=t;
		UPDATE pre_forum_thread SET maxposition=b WHERE tid=t;
		END LOOP;
	CLOSE thread_id;
end;//
DELIMITER ;

discuz 的数据库,重新计算回复的次数然后更新到 pre_forum_thread 表, 只要执行就会报 Out of range value for column 'replies' at row 1 对 mysql 没啥研究,这还是根据网上资料现学的。。请问应该怎么修改? 感谢

4834 次点击
所在节点    MySQL
16 条回复
Nicoco
2019-04-05 21:40:41 +08:00
还有胆子大,敢写存储过程的……
Lipoic
2019-04-05 21:50:46 +08:00
@Nicoco 请教大佬为啥不能用存储过程
Nicoco
2019-04-05 22:13:46 +08:00
@Lipoic 你写的这些简单业务,问题不大;随着业务发展,存储过程膨胀,膨胀到成百上千行…… 可以脑补一下
dobelee
2019-04-05 22:26:26 +08:00
闻到了一股火药味。boom !
caqiko
2019-04-05 22:32:55 +08:00
游标打开了吗亲?
open thread_id
ladypxy
2019-04-05 22:39:21 +08:00
@caqiko 打开了,主楼里是笔误
ra1983
2019-04-05 22:44:22 +08:00
@Nicoco 不用脑补,维护过超过 5000 行的存储过程。
只能说现在互联网行业的程序员太膨胀了,自己没见过的东西就是不合理的
caqiko
2019-04-05 22:55:36 +08:00
@ladypxy #6
直接看报错 Out of range value for column 'replies' at row 1
可能是字段 replies 的类型和长度的问题。

我看这个 SP 是没问题啊。手动查一条试试看,会不会有问题?
weizhen199
2019-04-05 23:06:49 +08:00
@Nicoco
都是看业务需求的
我这里有个最多 1w 行,450 个 sp,超过 2k 行的有 150+个,一跑跑三天的程序了解下
blless
2019-04-05 23:09:50 +08:00
@ra1983
存储过程主要很多计算都集中在数据库里运算…,而且相当于用 sql 语言编程,sql 就那几个特性…基本等同于过程式编程。不是说见识少,维护性就是渣。人员流动几次就直接 boom
caqiko
2019-04-05 23:18:25 +08:00
@caqiko #8

No data - zero rows fetched, selected, or processed 这种问题,可能是没有加 HANDLER,我还没遇到过。
参考: https://blog.csdn.net/codegallery/article/details/14384963
ra1983
2019-04-05 23:36:43 +08:00
@blless

所谓的维护性是渣是建立在复杂的业务逻辑上的。
现在的互联网行业,难度在于总体架构,而不是业务复杂度。访问压力大,而单次访问的业务很简单。以某些行业的业务复杂度,按互联网行业的跳槽频率,根本没有办法维护了,业务还没理解透人就跳槽了。
neoblackcap
2019-04-06 02:34:56 +08:00
@ra1983 存储过程的确有很大的,各类金融系统里面多得是。不过我有一件想请教,排除旧系统维护的缘故。新的业务有必要使用存储过程吗?
ra1983
2019-04-06 03:05:08 +08:00
@neoblackcap

业务系统里面也开始减少存储过程了
但是 BI 里还是大量使用
singer
2019-04-06 10:35:14 +08:00
lsido
2019-04-06 16:24:44 +08:00
接过一个菠菜业务,开奖派奖全用存储过程做,一点都不友好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/552406

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX