彻底崩溃了!求救 Mysql 存储过程语句

chenluozhi chenluozhi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
fuck啊啊啊啊啊啊啊啊啊啊;
昨晚搞了一个晚上,早上又搞了一个晚上,可查看的书少之又少,全部都是一笔带过;
看帖无数,看来看去都是那几个转帖,要不就是无法符合我的要求,没法依葫芦画瓢;算本人愚钝了,


本人想完成一个很简单的功能:
编写一存储过程,根据传进去的 表名 和 条件;返回该表的总记录数,例如(下边代码是错误的,思路是对的)



DROP PROCEDURE IF EXISTS getTotalCounts;
create procedure getTotalCounts(in tableName varchar(100),in whereText varchar(100),out totalCounts int)
comment '获取表总记录数'
begin

set @table_name=tableName;
set @total = totalCounts;
set @where_text=whereText;
set @s=' select count(*) into @total from ' + @table_name+ ' where '+ where_text;
prepare stmt from @s;
execute stmt;
set totalCounts = @total;
DEALLOCATE prepare stmt;
end;



 CallableStatement proc =con.prepareCall("{call getTotalCounts(?,?,?)}");   
proc.setString(1, "blog_article");
proc.setString(2,"cate_id>0");
proc.registerOutParameter(3,Types.INTEGER);
proc.execute();


本人以前很少接触存储过程啊,疑问比较多;那个mysql在线帮助文档没什么用的,一个好的例子都没有。
1、本人记得对于 (out test) 类型的参数,如果要用的话,直接调用 select xxx into test from xxx 就可以把查询结果插入到test 就可以了;上边那个个存储过程 为什么不能写成:



begin
select count(*) into totalCounts from tableName where where_Text;
end

如果这样写多简单啊,非要搞个什么

prepare stmt from @s;
execute stmt;

2、有些地方定义 declare str varchar(100)变量,有些地方直接@str(@出来的变量是什么类型的?) 一个变量;在使用的时候,真是乱七八糟的。

3、在网上我看到 有些人连接字符串用concat,有些又直接用 + 号就行;两者有什么区别?

不多说了,关键是能写出我上边那个存储过程,好等我依葫芦画瓢!~~~谢谢了!
...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部
chenluozhi
MySQL 57,062 成员 56,759 内容